`

Java源文件是如何被找到的?

 
阅读更多

原写于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上百实例源码以及开源项目源代码

     一个Java+ajax写的登录实例,附有JAVA源文件,JAVA新手朋友可以学习一下。 JAVA+JSP的聊天室 8个目标文件 简单 JavaScript万年历 显示出当前时间及年份,还可以选择年份及月份和日期 Java编写的HTML浏览器 一个...

    将apk文件反编译成java源码

    把.apk文件改名为.zip,然后解压缩,得到其中的classes.dex文件,它就是java文件编译再通过dx工具打包成的,所以现在我们就用上述提到的2个工具来逆方向导出java源文件 2.把classes.dex拷贝到dex2jar.bat所在目录。 ...

    java源码包---java 源码 大量 实例

     一个Java+ajax写的登录实例,附有JAVA源文件,JAVA新手朋友可以学习一下。 JAVA+JSP的聊天室 8个目标文件 简单 JavaScript万年历 显示出当前时间及年份,还可以选择年份及月份和日期 Java编写的HTML浏览器 一...

    JAVA上百实例源码以及开源项目

     一个Java+ajax写的登录实例,附有JAVA源文件,JAVA新手朋友可以学习一下。 JAVA+JSP的聊天室 8个目标文件 简单 JavaScript万年历 显示出当前时间及年份,还可以选择年份及月份和日期 Java编写的HTML浏览器 一个...

    java源码包4

     一个Java+ajax写的登录实例,附有JAVA源文件,JAVA新手朋友可以学习一下。 JAVA+JSP的聊天室 8个目标文件 简单 JavaScript万年历 显示出当前时间及年份,还可以选择年份及月份和日期 Java编写的HTML浏览器 ...

    java源码包2

     一个Java+ajax写的登录实例,附有JAVA源文件,JAVA新手朋友可以学习一下。 JAVA+JSP的聊天室 8个目标文件 简单 JavaScript万年历 显示出当前时间及年份,还可以选择年份及月份和日期 Java编写的HTML浏览器 ...

    java源码包3

     一个Java+ajax写的登录实例,附有JAVA源文件,JAVA新手朋友可以学习一下。 JAVA+JSP的聊天室 8个目标文件 简单 JavaScript万年历 显示出当前时间及年份,还可以选择年份及月份和日期 Java编写的HTML浏览器 ...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    生成文件输入流,输入文件为c:/mycert.cer,获取一个处理X.509证书的证书工厂…… Java+ajax写的登录实例 1个目标文件 内容索引:Java源码,初学实例,ajax,登录 一个Java+ajax写的登录实例,附有JAVA源文件,JAVA新手...

    JAVA实现文件上传、下载,源代码和JAR包

    JAVA实现文件上传、下载,源代码和JAR包,包括详细的文档

    Delphi调用Java类(支持Java 6)完整源代码,可直接调试运行

    这两天正在做一个项目,需要使用Delphi与互联网社区网站进行...通过各种尝试及网上搜索终于找到了一个支持jdk1.6的jni.pas接口源文件,一切豁然开朗。为了方便大家,压缩包中已包含了jar6虚拟机,下载后可直接运行。

    迷宫寻路实现java版

    利用java语言实现简单的...本资源解压后是一个java源文件,可以导入到编译器(如 myEclimpse)后运行(Test是主类,运行它则可). 此算法给出的路径不是最短路径,只是各种可用路径中的一种。 欢迎各位高手指教。。。。

    反编译apk为java代码的工具

    把apk文件改名为.zip,然后解压缩其中的classes.dex文件,它就是java文件编译再通过dx工具打包成的,所以现在我们就用上述提到的2个工具来逆方向导出java源文件 2.把classes.dex拷贝到dex2jar.bat所在目录。 windows...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    生成文件输入流,输入文件为c:/mycert.cer,获取一个处理X.509证书的证书工厂…… Java+ajax写的登录实例 1个目标文件 内容索引:Java源码,初学实例,ajax,登录 一个Java+ajax写的登录实例,附有JAVA源文件,JAVA新手...

    JAVA语言代码查错器.zip

    JAVA语言代码查错器,... 注意3:提供的源文件要保证和代码查错器在同一目录下,这样可以保证代码查错器能快速找到源文件。 注意4:在使用源码文件进行比对时,对比的源文件的扩展名必须是.txt,否则程序不进行识别。

    基于java高考报志愿协助系统毕业设计(含源文件)

    本系统采用知网实现更为科学的中文匹配,让考生轻松的找到想要的学校与专业。 通过对 高考数据的分析,让考生能够更有把握的报上自己想要的学校与专业。减 少了部分考生因为对之前状况不了解而造成的悲剧。

    intellij-java2smali:IntelliJ IDEA和Android Studio插件,可轻松将Java和Kotlin文件编译为smali

    用法创建或打开具有所需功能的Java源文件点击“构建”和“编译为smali” 等待IDEA指示编译过程smali文件在编辑器中自动打开安装Java2smali在可用,因此可以在您的IDE的插件管理器中找到! 或者,您可以从发行版部分...

    java类查找工具jclassfinder(1b2)

    同时查找源文件:在查找.class时同时查找此类的.java文件。 2、在包中查找。 添加按钮:弹出"选择包"对话框,从中选择jar包,可多选。 导入按钮:自动从文件夹批量导入包。弹出"选择文件夹"对话框,从中选择文件夹,...

    标准计算器的Java实现

    我发现书上或是网上的Java计算器都不能像Windows的计算器那么好用,都有些问题,于是我就写了这个,希望没有问题吧,反正我自己没找到了。希望能帮到Java初学者哦~双击这个jar包就能运行了,源文件我也放到这个jar包...

Global site tag (gtag.js) - Google Analytics