原写于2010-10-17
题记:.java源文件是如何被找到的?.class字节码文件是如何被找到的?内容:全部借鉴《Java深度历险》之package 與import 機制
Package:命名空间的问题,隔离类之间的关系。
Import:声明引入的类的路径(仅在编译时有作用,编译后的文件,类的声明已经为全路径);好处“明晰的代码结构,分离在多个文件;帮助实现动态链接的功能”。
一、编译
package edu.nctu;
import com.taobao.Test;
import edu.nctu.*;
public class C
{
public void print() {
System.out.println("package test") ;
}
}
步骤:
1. 根据classpath建立,“类相对路径参考表”
如:javac –cp .;d:/test/,在d:/下执行,结果:d:/;d:/test/。
2. 以“类相对路径参考表”作为相对起始路径,验证能够找到所有要用的package。
根据import引入的package或全限定类名,import packagename.classname,將packagename之中的“.”以“/”取代.
2.1 若com.taobao.*形式,验证在d:/目录下是否存在com/taobao/目录,若不存在,依次检查d:/test/。
2.2 若com.taobao.Test形式,验证是否存在com/taobao/Test,与上相同。
3. 建立“类参考表”和“相对类参考表”
3.1 类参考表:com.taobao.Test
3.2 类相对参考表:com.taobao.*
4. 解析class{} 包含的代码
是否全限定类名
4.1 是,绝对路径 =“类相对路径参考表”+全限定类名,查找,不存在为错误;
4.2 否,绝对路径 =“类相对路径参考表”,查找;
4.2.1是,编译
4.2.2否,解析package
4.2.2.1 在类参考表,是否存在1以上的同名类,出错;否则,绝对路径 =“类相对路径参考表”+ “类参考表”,正确。
4.2.2.2 在类参考表找不到,绝对路径 = “类相对路径参考表”+ “相对类参考表”,若存在一个以上的类,出错;否则,正确。
提醒:
1.如果已经存在A .class文件,A .java不是必须的;
2.编译器在找到源码或字节码,会验证是否属于此package,但没有通过make机制的编译,是不会验证的;make机制,即编译器自动维护具有相互依赖关系的文件;javac命令直接编译文件,如:javac -cp d:/test com.edu.C.java,编译器角度:com.edu.C.java 是一个文件名,且没有通过make机制,所以-cp指定的路径建立的“类相对路径参考表”也不会使用,编译器直接在当前目录下查找com.edu.C.java,结果 ClassNotFoundException
二、运行
1. 编译结束后,import指令已经不存在,类被替换为“全限定类名”
2. 运行时类的加载,都是通过classloader进行,所以必须遵循正确的“包目录”结构,不管是否直接通过命令行执行。
步骤:
1. 建立“字节码路径参考表”,根据classpath
2. 绝对路径 = “字节码路径参考表”+ 全限定类名,查找;加载;找不到,报错。
附件:<Java深度历险>
相关推荐
一个Java+ajax写的登录实例,附有JAVA源文件,JAVA新手朋友可以学习一下。 JAVA+JSP的聊天室 8个目标文件 简单 JavaScript万年历 显示出当前时间及年份,还可以选择年份及月份和日期 Java编写的HTML浏览器 一个...
把.apk文件改名为.zip,然后解压缩,得到其中的classes.dex文件,它就是java文件编译再通过dx工具打包成的,所以现在我们就用上述提到的2个工具来逆方向导出java源文件 2.把classes.dex拷贝到dex2jar.bat所在目录。 ...
一个Java+ajax写的登录实例,附有JAVA源文件,JAVA新手朋友可以学习一下。 JAVA+JSP的聊天室 8个目标文件 简单 JavaScript万年历 显示出当前时间及年份,还可以选择年份及月份和日期 Java编写的HTML浏览器 一...
一个Java+ajax写的登录实例,附有JAVA源文件,JAVA新手朋友可以学习一下。 JAVA+JSP的聊天室 8个目标文件 简单 JavaScript万年历 显示出当前时间及年份,还可以选择年份及月份和日期 Java编写的HTML浏览器 一个...
一个Java+ajax写的登录实例,附有JAVA源文件,JAVA新手朋友可以学习一下。 JAVA+JSP的聊天室 8个目标文件 简单 JavaScript万年历 显示出当前时间及年份,还可以选择年份及月份和日期 Java编写的HTML浏览器 ...
一个Java+ajax写的登录实例,附有JAVA源文件,JAVA新手朋友可以学习一下。 JAVA+JSP的聊天室 8个目标文件 简单 JavaScript万年历 显示出当前时间及年份,还可以选择年份及月份和日期 Java编写的HTML浏览器 ...
一个Java+ajax写的登录实例,附有JAVA源文件,JAVA新手朋友可以学习一下。 JAVA+JSP的聊天室 8个目标文件 简单 JavaScript万年历 显示出当前时间及年份,还可以选择年份及月份和日期 Java编写的HTML浏览器 ...
生成文件输入流,输入文件为c:/mycert.cer,获取一个处理X.509证书的证书工厂…… Java+ajax写的登录实例 1个目标文件 内容索引:Java源码,初学实例,ajax,登录 一个Java+ajax写的登录实例,附有JAVA源文件,JAVA新手...
JAVA实现文件上传、下载,源代码和JAR包,包括详细的文档
这两天正在做一个项目,需要使用Delphi与互联网社区网站进行...通过各种尝试及网上搜索终于找到了一个支持jdk1.6的jni.pas接口源文件,一切豁然开朗。为了方便大家,压缩包中已包含了jar6虚拟机,下载后可直接运行。
利用java语言实现简单的...本资源解压后是一个java源文件,可以导入到编译器(如 myEclimpse)后运行(Test是主类,运行它则可). 此算法给出的路径不是最短路径,只是各种可用路径中的一种。 欢迎各位高手指教。。。。
把apk文件改名为.zip,然后解压缩其中的classes.dex文件,它就是java文件编译再通过dx工具打包成的,所以现在我们就用上述提到的2个工具来逆方向导出java源文件 2.把classes.dex拷贝到dex2jar.bat所在目录。 windows...
生成文件输入流,输入文件为c:/mycert.cer,获取一个处理X.509证书的证书工厂…… Java+ajax写的登录实例 1个目标文件 内容索引:Java源码,初学实例,ajax,登录 一个Java+ajax写的登录实例,附有JAVA源文件,JAVA新手...
JAVA语言代码查错器,... 注意3:提供的源文件要保证和代码查错器在同一目录下,这样可以保证代码查错器能快速找到源文件。 注意4:在使用源码文件进行比对时,对比的源文件的扩展名必须是.txt,否则程序不进行识别。
本系统采用知网实现更为科学的中文匹配,让考生轻松的找到想要的学校与专业。 通过对 高考数据的分析,让考生能够更有把握的报上自己想要的学校与专业。减 少了部分考生因为对之前状况不了解而造成的悲剧。
用法创建或打开具有所需功能的Java源文件点击“构建”和“编译为smali” 等待IDEA指示编译过程smali文件在编辑器中自动打开安装Java2smali在可用,因此可以在您的IDE的插件管理器中找到! 或者,您可以从发行版部分...
同时查找源文件:在查找.class时同时查找此类的.java文件。 2、在包中查找。 添加按钮:弹出"选择包"对话框,从中选择jar包,可多选。 导入按钮:自动从文件夹批量导入包。弹出"选择文件夹"对话框,从中选择文件夹,...
我发现书上或是网上的Java计算器都不能像Windows的计算器那么好用,都有些问题,于是我就写了这个,希望没有问题吧,反正我自己没找到了。希望能帮到Java初学者哦~双击这个jar包就能运行了,源文件我也放到这个jar包...