`
hekeji
  • 浏览: 51347 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

Java Class Path

阅读更多
我们在系统的环境变量里面添加一个新的变量叫 CLASSPATH。他的描述方法用PATH的描述方法:

可以看到,新的变量 CLASSPATH使用的系统的路径表示的(例如D:\classes\ 就是一个系统的路径),但是不能用环境环境变量PATH,所以不能写成:

%Path%;D:\classes\;D:\j2sdk1.4.2b\lib\dt.jar;D:\j2sdk1.4.2b\lib\tools.jar

或者

$Path;D:\classes\;D:\j2sdk1.4.2b\lib\dt.jar;D:\j2sdk1.4.2b\lib\tools.jar

这样当jvm想要调用Java文件(class文件)的时候,不能通过PATH寻找,只能 从CLASSPATH寻找了。

让我们看一个例子:

D:\JavaTest>javac HelloWorld.java

这一步的执行过程是:

1.系统发现启动的程序是javac,于是开始寻找javac.exe。 寻找的次序按照上篇所述寻找notepad.exe的顺序雷同

2.找到之后,运行javac.exe,附加参数HelloWorld.java

3.javac编译HelloWorld.java -> HelloWorld.class

如果HelloWorld.java中有其他类库(类库就是分类整理好的一堆class 文件)的引用,例如:

     import java.io.*; import com.hdpan.util.*;

对于标准类库的引用,像上面的"java.io.*",可以直接使用,也就是说它 不需要显示的放在系统的环境变量CLASSPATH中。

而对于非标准类库,像"com.hdpan.util.*",javac怎么来找到它呢? 上面说了,它是通过系统的环境变量CLASSPATH来找:让我们再回顾一下我 们的CLASSPATH是如何设定的:

.;D:\classes\;D:\j2sdk1.4.2b\lib\dt.jar;D:\j2sdk1.4.2b\lib\tools.jar

然后再看看当前的目录结构:

JAVA中classpath的了解[归纳] - 无风 - 听雨无风

首先找到D:\JavaTest\HelloWorld.java,这个是我们正在编译的文件,接 下来,我们来看看javac是怎么来寻找net.eastdawn.util.*的:

发现是非标准类库,开始搜索CLASSPATH,第一个CLASSPATH是".",也就是当前目录,当前目录有一个net文件夹,然后eastdawn,可是eastdawn文件夹下面没有util文件夹,于是第一个CLASSPATH搜索失败。然后搜索第二个CLASSPATH "D:\classes\",果然再此发现了net\eastdawn\util\,于是这里编译通过。

至此,D:\JavaTest>javac HelloWorld.java 执行完毕。

现在也应该明白为什么在CLASSPATH的前面会有一个 "."了吧?他就是为了优先 搜索当前目录下的class。

运行完javac之后,当前目录多一个文件:HelloWorld.class,运行它:

D:\JavaTest>java HelloWorld

(注意:是java HelloWorld,而不是java HelloWorld.class)

这里用到了java命令,所以启动一个jvm(jvm是什么?看前面的文章吧,:)), 开始搜索CLASSPATH,首先按照"."搜索,在当前目录找到了HelloWorld.class, 于是运行!

现在你明白了为什么许多人别写了HelloWorld却在运行的时候出现这个了吧:

你想对了,就是因为jre不能根据CLASSPATH来找到HelloWorld.class, 哪怕HelloWorld.class就在当前目录,当时环境变量的CLASSPATH里没有 "."这个 设定,同样是找不到!

在web工程下,CLASSPATH的具体目录以及解释是:

classpath是指 WEB-INF文件夹下的classes目录

classes含义:

1.存放各种资源配置文件 eg.init.properties log4j.properties struts.xml

2.存放模板文件         eg.actionerror.ftl

3.存放class文件       对应的是项目开发时的src目录编译文件

总结:这是一个定位资源的入口

lib和classes下文件访问优先级的问题:  lib>classes
分享到:
评论

相关推荐

    Spring_ClassPathResource获得bean对象

    在Spring框架中,ClassPathResource是获取类路径资源的一个重要工具。它允许我们从类路径(classpath)中读取文件,如配置文件、属性文件等,这对于构建和管理Java应用程序非常有用。本篇文章将深入探讨如何使用Spring...

    Java 的 Class Path 和 Package

    java, 然后兴冲冲地写了个 hello world,然后编译,运行, 等着那两个美好的单词出现在眼前, 可是不幸的是, 只看到了 Can't find class HelloWorld 或者 Exception in thread main java.lang.NoSuchMethodError ...

    ClassFinal是一款java class文件安全加密工具

    ClassFinal正是为解决这些问题而设计的一款Java类文件安全加密工具。这款工具能够对编译后的`.class`文件进行加密处理,使得未经授权的用户无法轻易读取或反编译代码,从而提高代码的安全性。 ClassFinal的特点在于...

    java中path和classpath的设置

    ### Java中的Path与Classpath设置详解 在Java开发过程中,正确配置环境变量是十分重要的一步。其中,`path`和`classpath`是最为关键的两个环境变量,它们直接影响到Java程序能否正常编译和运行。 #### 一、Path 的...

    Spring实战之使用ClassPathResource加载xml资源示例

    在Spring框架中,`ClassPathResource`是一个非常重要的类,用于加载类路径(classpath)下的资源文件,如XML配置文件。在实际开发中,我们经常需要从类路径中读取这些资源来初始化bean或其他配置。本示例将详细介绍...

    jar class-path的作用详细教程

    `class-path`是Java虚拟机(JVM)在运行Java应用程序时查找类和资源的路径。默认情况下,JVM只会在当前目录(".")下搜索`.class`文件。为了指定额外的目录或JAR文件,我们需要设置`class-path`环境变量或使用`-cp`...

    JAVA 将class打包为jar

    ### JAVA将Class文件打包为JAR文件的详细步骤与注意事项 #### 标题与描述概述 在Java开发中,将多个Class文件打包成一个JAR(Java Archive)文件是一种常见的做法,这有助于简化项目的部署过程并提高代码的可管理性...

    Springboot访问Resource下的文件.docx

    ClassPathResource resource = new ClassPathResource("file.txt"); InputStream inputStream = resource.getInputStream(); ``` 2. **使用 ResourceLoader**: - Spring 提供了一个 `ResourceLoader` 接口,...

    Java类动态加载(一)——java源文件动态编译为class文件

    这篇博客“Java类动态加载(一)——java源文件动态编译为class文件”可能主要探讨了如何在运行时将Java源代码(.java)编译成对应的字节码文件(.class),并将其加载到Java虚拟机(JVM)中。以下是对这个主题的详细解析...

    matlab开发-使用MongoDBJavaDriver

    下载完成后,将JAR文件添加到MATLAB的classpath,可以使用`addpath`命令或者设置MATLAB的“Java Class Path”环境变量。 在`TestMongo.m`文件中,我们可能会看到以下代码片段,展示了如何初始化MongoDB连接: ```...

    Java PathFinder-jpf-core

    Java PathFinder (JPF) 是一个开源项目,专注于Java应用程序的动态分析和验证。它采用了一种称为“符号执行”的技术来探索程序的所有可能执行路径,以检测潜在的错误和漏洞。这个工具的核心部分是“jpf-core”,它是...

    Spring的上课内容

    Spring容器通过`ClassPathResource`加载配置文件,它可以从类路径(ClassPath)中查找资源。例如,如果我们把`applicationContext.xml`放在`com.test.factory`包下,我们可以这样加载: ```java ClassPathResource ...

    Cpp运行Java的class文件.zip

    Cpp运行Java的class文件,可以编译... options[0].optionString = "-Djava.class.path=./"; args.options = options; args.ignoreUnrecognized = JNI_FALSE; return JNI_CreateJavaVM(jvm, (void **)env, &args); }

    spark-submit cluster模式时driver-class-path支持hdfs路径

    spark官方版本的driver-class-path不支持hdfs路径,只支持本地路径。本资源解决了这个问题,driver-class-path在cluster模式时可以支持hdfs路径,解决了cluster模式driver有大量jar依赖的问题。

    java中Path和ClassPath用法比较

    例如,如果你想从命令行编译一个Java文件,需要使用javac命令,但如果你没有设置PATH环境变量,你需要在每次运行时指定完整路径,例如:C:\Java\jdk1.7.0\bin\javac TestClass.java。 Path变量用于设置所有Java软件...

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

    3. 在打开的对话框中,导航到"Java构建路径"(Java Build Path)。 4. 在"源"(Source)选项卡中,你可以看到项目的源代码目录以及它们对应的输出目录。默认情况下,输出目录应设置为"bin"。 如果你想要通过批处理...

    Java class finder

    3. **类路径**:Java虚拟机(JVM)在运行时查找类的路径,可以通过系统属性`java.class.path`来设置。类路径可以包含目录、JAR文件以及具有类的任何其他位置。 4. **反射**:Java的反射机制允许在运行时动态地获取...

    spring2.0语法着色文档

    ClassPathResource resource = new ClassPathResource("beans.xml"); BeanFactory beanFactory = new XmlBeanFactory(resource); ``` - **ClassPathXmlApplicationContext**:可以从类路径下的XML文件加载配置...

Global site tag (gtag.js) - Google Analytics