Java程序在运行的时候具体是如何确定.class文件位置的呢?

转载 2016年11月24日 14:40:59

【摘自:Java编程思想】

来看看Java解释器的运行过程吧:首先,找出环境变量CLASSPATH(可以通过操作系统来设置)。CLASSPATH包含一个或多个目录,用作查找.class文件的根目录。从根目录开始,解释器获取包名称并将每个句点替换成反斜杠,以从CLASSPATH根中产生一个路径(例如,package fruit.Apple就变成为fruit/Apple或fruit/Apple或其他,这将取决于操作系统)。得到的路径会与CLASSPATH中的各个不同的根目录路径相连接以获得一个完整的目录路径,解释器就在这些目录中查找与你所需要的类名称相同的.class文件。(此外,解释器还会去查找某些涉及Java解释器所在位置的标准目录。)

为了理解这一点,以域名Food.net为例。把它的顺序倒过来,并且全部转换为小写,net.food就成了我们创建类的一个独一无二的名称空间。如果我们决定再创建一个名为fruit的类库,我们可以将该名称进一步细分,于是得到一个包名如下:

package net.food.fruit;

现在,这个包名称就可以用作下面Apple这个文件的名称空间保护伞了:

package net.food.fruit;
    
    public class Apple
    {
    	public Apple()
		{
		System.out.println("net.food.fruit.Apple");
		}
    }

这个文件可能被置于计算机系统中的如下目录中:

C:/DOC/JavaT/net/food/fruit

之所以要放在这个目录下面是因为前面提到的,便于系统通过CLASSPATH环境变量来找到这个文件。沿着此路径往回看就能看到包名net.food.fruit,但是路径的前半部分怎么办呢?交给环境变量CLASSPATH吧,我们可以在计算机中将环境变量CLASSPATH设置如下:

CHASSPATH=.;D:/JAVA/LIB;C:/DOC/JavaT

CLASSPATH可以包含多个可供选择的查询路径。每个路径都用分号隔开,可以看到,上面这个CLASSPATH环境值的第三个路径就是我们前面文件的根目录。如前所述,Java解释器将首先找到这个根目录C:/DOC/JavaT,然后将其与包名net.food.fruit相连接,连接的时候将包名中的句点转换成斜杠,就得到完整的class文件路径C:/DOC/JavaT/net/food/fruit。

需要补充说明的一点,这里CLASSPATH环境变量关照的是package中的class文件,如果关照的是JAR包中的class文件,则会有一点变化,即,必须在CLASSPATH环境变量路径中将JAR文件的实际名称写清楚,而不仅仅是指明JAR包所在位置目录。可以想象,因为JAR包所在目录位置上可能存在很多别的JAR包,而我们需要使用的那个class文件只会存在于其中一个JAR包里面,因此可以这样理解,这里JAR包实际上也充当了一级文件目录的角色,因此要在CLASSPATH环境变量中写清楚JAR包文件名。例如如果Apple文件存在于名为fruit.jar的JAR文件中,则CLASSPATH应写作:

CLASSPATH=.;D:/JAVA/LIB;C:/DOC/JavaT/net/food/fruit.jar

一旦路径得以正确建立,下面的文件就可以放于任何目录之下:

import net.food.fruit.*;

public class LibTest
{
	public static void main(String[] args)
	{
		Apple a=new Apple();
	}
}
当编译器碰到fruit库的import语句时,就开始在CLASSPATH所指定的目录中查找,查找过程中分别将CLASSPATH中设定的各项根目录与包名转换来的子目录net/food/fruit相连接,在连接后的完整目录中查找已编译的文件(即class文件)找出名称相符者(对Apple而言就是Apple.class)。找到了这个文件即匹配到了Apple类。

eclipse打开java类编译后的class文件所在目录

  • 2014年12月24日 18:47
  • 461B
  • 下载

部署项目之后,.jsp文件编译之后的.class文件放在了哪里?

前言 不管是直接部署到tomcat,还是利用myeclipse&eclipse部署web项目,.jsp文件编译之后的.class文件都是在这个目录下面(D:\JavaTools\tomcat\7.0...
  • B_qxzb
  • B_qxzb
  • 2015年09月06日 18:02
  • 4964

Android studio生成的class文件在哪里查看

app\build\intermediates文件夹里是也 intermediates:是一个中间人,调节人的意思, java源文件转为class文件后再转为dex文件,最后生成apk ...
  • rnZuoZuo
  • rnZuoZuo
  • 2016年11月07日 14:53
  • 5184

eclipse编译的class文件在哪里

在eclipse中查找编译后的class
  • qq_30072293
  • qq_30072293
  • 2017年11月08日 11:38
  • 642

运行java的class文件方法详解

运行java的class文件方法详解
  • javaniuniu
  • javaniuniu
  • 2016年10月21日 15:30
  • 2766

Java系统获取最近修改代码的class文件

  • 2017年06月16日 18:30
  • 4KB
  • 下载

修改class文件的jar包,jclasslib.jar

  • 2016年07月12日 17:40
  • 167KB
  • 下载

关于eclipse编译过后的class文件路径

最近项目遇到一个问题,就是如果测试服务器不在内网我们无法用svn来更新项目,只好用最笨的方法把每次更新后的代码复制粘贴到服务器端。 别的文件直接复制到workspace没问题,但是java文件要经...
  • qiao94831
  • qiao94831
  • 2017年02月08日 09:44
  • 1824

命令行执行class文件和jar文件

一.命令行执行class文件 在d:/test/lib目录下,有一个Mains.java文件 使用命令javac编译,执行成功: D:\test\lib>javac Mains.java此时使用ja...
  • wuyong5angel
  • wuyong5angel
  • 2015年01月20日 14:27
  • 731

运行java的class文件方法详解

运行java的class文件方法详解
  • javaniuniu
  • javaniuniu
  • 2016年10月21日 15:30
  • 2766
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java程序在运行的时候具体是如何确定.class文件位置的呢?
举报原因:
原因补充:

(最多只允许输入30个字)