`

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案例源文件大全”的资源包中,我们找到了一系列与Java编程相关的实例,这些实例深入浅出地展示了面向对象的设计技术。面向对象编程(Object-Oriented Programming, OOP)是Java的核心特性,它通过类...

    java class源文件查看工具

    Java Class源文件查看工具是Java开发者在处理已编译的.class文件时不可或缺的辅助工具,主要用于将二进制的.class文件转换回可读性更强的.java源代码文件。这种过程通常被称为反编译。反编译对于理解第三方库的内部...

    ewebeditor中net文件夹下java源文件

    2. **Java源文件与.CLASS文件**:Java源文件是使用Java编程语言编写的,文件扩展名为.java。这些文件被Java编译器编译成字节码,即.CLASS文件,才能在Java虚拟机(JVM)上运行。在开发环境中,源文件用于调试和理解...

    jdk java源文件

    一、Java源文件结构 JDK源文件按照功能模块划分,主要包括以下几个部分: 1. **核心类库**:这是Java平台的基础,包括`java.lang`、`java.util`、`java.io`、`java.nio`等包,它们提供了基本数据类型、对象创建、...

    如何在 Eclipse Release 3.3.2中打开已有的工程项目和java源文件.doc

    在Eclipse Release 3.3.2中,打开已有工程项目和Java源文件是开发者日常工作中常见的操作。这个过程可以通过Eclipse内置的导入功能来实现,下面将详细解释这两个步骤。 一、打开已有的工程项目 1. 启动Eclipse ...

    java gb2312_utf8

    `HGB2312.java`可能是一个Java源文件,其中包含处理GBK和UTF-8转换的函数或类。这个文件可能包含自定义的解码和编码逻辑,或者使用Java内置的`Charset`类进行转换。 `www.pudn.com.txt`看起来像是一个文本文件,...

    将apk文件反编译成java源码

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

    java JDK 实例宝典源文件

    Java JDK实例宝典源文件是针对Java初学者和开发者的一份宝贵资源,它包含了大量基于J2SE 5.0版本的实战示例,旨在帮助读者深入理解和掌握Java编程技术。JDK(Java Development Kit)是Java编程的核心工具集,包含...

    java源代码例子

    Java源代码例子主要展示了如何在Java编程环境中创建和设计图形用户界面(GUI)。在这个主题下,我们可以深入探讨几个关键知识点: 1. **Java基础**:Java是一种广泛使用的面向对象编程语言,以其“一次编写,到处...

    java源代码

    Java是一种面向对象的、跨平台的编程语言,被广泛应用于各种软件开发,包括桌面应用、Web应用、移动应用(尤其是Android系统)以及大型企业级系统。 在"java源码包1"中,我们可以期待找到一系列的Java程序实例,...

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

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

    项目源文件

    在IT行业中,项目源文件是开发过程的核心组成部分,它们包含了所有必要的代码、配置文件和资源,使得一个软件项目能够从零构建到可运行状态。在这个特定的案例中,标题为"项目源文件",暗示了这是一个包含有完整开发...

    大鱼吃小鱼 JAVA游戏源码

    在这个项目中,Java被用来创建游戏对象(如鱼、海洋背景、边界等),处理游戏逻辑,以及渲染游戏画面。 其次,游戏循环是任何游戏的基础,它通常由更新逻辑和渲染两部分组成。在`BigFish`源码中,可以找到一个持续...

    1.初识Java作业-1

    对于Java源文件,一个源文件可以包含多个类,但最多只能有一个公共类(public class),并且这个公共类的名称必须与源文件名相同。例如,如果公共类名为`A1`,源文件应命名为`A1.java`。 Java源文件的编译通常使用`...

    javac编译成功用java运行class文件出现“找不到或无法加载主类”的问题解决起来很简单.doc

    如果我们在 cmd 下运行 java 命令,需要确保当前目录是 Java 源文件所在的目录,这样生成的 Class 文件也将在该目录下,java 命令将可以正确地找到该 Class 文件。 在 cmd 下运行 java 命令时,需要注意当前目录...

    Python删除Java源文件中全部注释的实现方法

    在这个场景中,正则表达式被用来找到注释的起始和结束符号。 ### 字符串查找与替换 字符串查找是指在一段文本中查找某个子串的位置,而字符串替换则是将文本中的一段子串替换成另一段内容。在Python中,可以通过...

    java中package用法详解

    2. **编译后的类文件(`.class`)**:Java源文件编译后的二进制文件。 3. **其他资源文件**:如图片、XML配置文件、音频文件等。 #### Package的声明 在Java源文件中,使用`package`关键字声明该文件属于哪一个包...

    关于含有包的java类编译

    这里,`-cp .` 指定了当前目录作为类路径,确保 `javac` 生成的 `.class` 文件可以被找到。 总结,编译含有包的Java类涉及以下步骤: 1. 确保源文件结构与包结构一致。 2. 使用 `javac` 命令编译Java源文件,指定 `...

    java试题-带答案.pdf

    1. **Java源文件编译成字节码**:Java源代码(.java)文件首先被编译成一种名为字节码(.class)的中间格式,这种字节码是一种平台无关的二进制格式。 2. **不同平台上的Java虚拟机(JVM)**:字节码由特定平台上的Java...

    关于java100问(基础问题)

    在Windows系统中,可以通过控制面板的系统设置,找到环境变量选项,新建系统变量`JAVA_HOME`,值为JDK的安装路径。然后在Path变量中添加`%JAVA_HOME%\bin`和`%JAVA_HOME%\lib`。 9. **"can not read xxx.java"错误...

Global site tag (gtag.js) - Google Analytics