`

java中classpath及路径的使用

阅读更多

javac -classpath的使用:

 javac:如果当前你要编译的java文件中引用了其它的类(比如说:继承),但该引用类的.class文件不在当前目录下,这种情况下就需要在javac命令后面加上-classpath参数,通过使用以下三种类型的方法 来指导编译器在编译的时候去指定的路径下查找引用类。

 

(1).绝对路径:javac -classpath c:\junit3.8.1\junit.jar   Xxx.java
(2).相对路径:javac -classpath ..\junit3.8.1\Junit.javr  Xxx.java
(3).系统变量:javac -classpath %CLASSPATH% Xxx.java

(注意:%CLASSPATH%表示使用系统变量CLASSPATH的值进行查找,这里假设Junit.jar的路径就包含在CLASSPATH系统变量中)

 

 

javac 绝对路径的使用:

javac:假设你要编译的类文件名叫:HelloWorld.java,其完全路径为:D:\java\HelloWorld.java。但你所在的当前目录是:C:\Documents and Settings\peng>。如果想在这里执行编译,会有什么结果呢?
 
(1).C:\Documents and Settings\peng> javac HelloWorld.java 这时编译器会给出如下的错误提示信息:
error: cannot read: HelloWorld.java

这是因为默认情况下javac是在当前目录下查找类文件,很明显这个路径不是我们存放类文件的地方,所以就会报错了。
       
(2).C:\Documents and Settings\peng>javac D:\java\HelloWorld.java 这时编译成功。
所以,只要你执行javac命令的目录不是类文件存放的目录,你就必须在javac命令中显式地指定类文件的路径。

 

java -classpath的使用:


java:假设我们的CLASSPATH设置为:D:\peng\java\pro ,在该目录下有三个文件:HelloWorld.java / HelloWorldExtendsTestCase / HelloWorldExtendsHelloWorld。这三个文件的类声明分别如下:

HelloWorld.java :public class HelloWorld


HelloWorldExtendsHelloWorld.java :public class HelloWorldExtendsHelloWorld extends HelloWorld
HelloWorldExtendsTestCase.java:public class HelloWorldExtendsTestCase extends junit.framework.TestCase

 

假设我们已经按照上面关于javac -classpath和javac 绝对路径的使用,顺利地完成了三个文件地编译。现在我们在C:\Documents and Settings\peng>目录下执行这三个.class文件

(1).C:\Documents and Settings\peng>java  HelloWorld Hello World

 

可以看到执行成功。为什么我们在 C:\Documents and Settings\peng>执行命令,JVM能够找到D:\peng\java\pro\HelloWorld.class文件呢?这是因为我们配置了系统变量CLASSPATH,并且指向了目录:D:\peng\java\pro 。所以JVM会默认去该目录下加载类文件,而不需要指定.class文件的绝对路径了。
        
(2).C:\Documents and Settings\peng>java HelloWorldExtendsHelloWorld Hello World

可以看到执行成功了。HelloWorldExtendsHelloWorld继承了HelloWorld类,所以在执行时JVM会先查找在CLASSPATH下是否存在一个HelloWorld.class文件,因为我们已经成功编译了HelloWorld 类了,所以可以成功执行HelloWorldExtendsHelloWorld.class
 
(3).C:\Documents and Settings\peng>java HelloWorldExtendsTestCase
     Exception in thread "main" java.lang.NoClassDefFoundError: junit/framework/TestCase

可以看到程序抛出异常了,提示找不到junit.framework.TestCase文件。

为什么同样在:\peng\java\pro 下,HelloWorldExtendsHelloWorld.class就可以成功执行,而这个就不行了呢?

 

这是因为junit.framework.TestCase.class文件并不存在于当前目录下,所以为了能够让程序成功运行,我们必须通过指定CLASSPATH的方式,让JVM可以找到junit.framework.TestCase这个类,如(4):

 

(4). C:\Documents and Settings\peng>java -classpath %CLASSPATH% HelloWorldExtendsTestCase Hello World

 

总结:
(1).何时需要使用-classpath:当你要编译或执行的类引用了其它的类,但被引用类的.class文件不在当前目录下时,就需要通过-classpath来引入类;


(2).何时需要指定路径:当你要编译的类所在的目录和你执行javac命令的目录不是同一个目录时,就需要指定源文件的路径(CLASSPATH是用来指定.class路径的,不是用来指定.java文件的路径的)

 

分享到:
评论

相关推荐

    java项目中获取路径详解

    可以在配置文件中配置所需要的路径,以便在项目中使用。 总结 Java 项目中获取路径非常重要。使用 `getResource` 方法可以获取相对路径,使用 `getRealPath()` 方法可以获取绝对路径。ClassPath 路径是 Java 项目...

    Java命令行classpath的设置

    JavaDBTest.java的运行可能还需要特定的数据库驱动,例如,如果它使用了Java Database Connectivity (JDBC) 来连接Oracle数据库,那么需要在类路径中包含Oracle的JDBC驱动(如ojdbc.jar)。确保这些依赖的JAR文件在...

    Java环境配置与设置JAVA_HOME_CLASSPATH_PATH的目的

    CLASSPATH 环境变量是 Java 类路径,它的设置内容是 Java 类库的路径。例如,CLASSPATH=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar。 设置 CLASSPATH 环境变量的作用是为了告诉 Java 编译器和运行时环境_...

    java classpath 理解

    - 可以使用 `set CLASSPATH=路径`(Windows)或 `export CLASSPATH=路径`(Linux/Mac)来临时修改环境变量中的 classpath。 - 例如:`set CLASSPATH=E:\test`。 2. **持久化设置 Classpath**: - 在 Windows ...

    java的classpath的终结者(不会让你失望)

    在Java编程的学习与实践中,环境配置是入门的关键步骤之一,其中最为棘手的问题之一便是如何正确设置`classpath`。`classpath`不仅影响着程序能否正常编译和运行,还关系到开发者的调试效率与代码组织方式。本文将...

    JAVA获取CLASSPATH路径的方法详解

    1. `public URL getResource(String name)`:这个方法返回一个`URL`对象,该对象指向在类路径中找到的指定名称的资源。这里的`name`参数是相对于类路径根的路径。 2. `public InputStream getResourceAsStream...

    java classloader classpath 张孝祥

    - **扩展类加载器**(Extension ClassLoader):由`sun.misc.Launcher$ExtClassLoader`实现,它用来加载<JAVA_HOME>/lib/ext目录下的类库或被-Djava.ext.dirs指定的路径中的所有类库。 - **应用类加载器**...

    java classpath 配置详细讲解

    - 注意:虽然示例中使用的是JDK 1.5.0,但实际上最新版本的JDK推荐使用,以便获取更多的特性和安全性更新。 2. **验证安装**: - 打开命令提示符,输入`java`命令,查看是否显示出JVM的相关信息。 - 输入`javac`...

    Java 中的 ClassPath 和 Package

    Java中的ClassPath和Package是Java开发中至关重要的概念,它们直接影响到Java程序的编译和运行。在这篇文章中,我们将详细探讨这两个主题。 首先,让我们理解什么是ClassPath。ClassPath是Java虚拟机(JVM)查找类...

    java中path和classpath的设置

    - 如果路径中包含空格,例如`Program Files`,则需要将整个路径用双引号括起来,如`"D:\Program Files\Java\jdk1.6.0_16\bin"`。 #### 二、Classpath 的设置 `classpath`环境变量主要用于告知Java虚拟机(JVM)在...

    Java中获取类路径classpath的简单方法(推荐)

    这种方法适用于查找类路径中的资源文件,但并不总是提供完整的类路径。 这些方法在不同的场景下各有用途。`System.getProperty("java.class.path")` 提供了全局的类路径,而 `CodeSource.getLocation()` 和 `Thread...

    13-Java语言(classpath环境变量)

    Java语言的classpath环境变量是Java开发和运行过程中不可或缺的一个配置项。它定义了Java虚拟机(JVM)在执行程序时查找类文件的路径,确保JVM能够找到所需的类库和资源。理解并正确设置classpath对于Java开发者至关...

    jdk的classpath路径和环境配置

    ### jdk的classpath路径和环境配置 在Java开发过程中,正确配置JDK(Java Development Kit)的环境变量是非常重要的步骤之一。它不仅关乎到开发工具能否正常运行Java程序,还直接影响到开发效率与项目的顺利进行。...

    详解Java中-classpath和路径的使用

    这样,Java编译器会使用系统环境变量`CLASSPATH`中定义的路径。 举个例子,如果你有一个名为`HelloWorld.java`的源文件,存放在`D:/java`目录下,而你当前位于`C:/Documents and Settings/peng`,不指定路径直接...

    Java路径问题最终解决方案之一.

    Java中使用的路径主要分为两类:绝对路径和相对路径。具体来说,这两种路径又有以下四种表现形式: 1. **URI形式的绝对资源路径**:例如 `file:/D:/java/eclipse32/workspace/jbpmtest3/bin/aaa.b`。URL是URI的一个...

    java中File的相对路径与绝对路径总结

    - 需要注意的是,这种方式同样只能获取到类路径中的资源。 #### 注意事项 - **使用相对路径时**,务必确保路径的正确性,否则可能会导致无法找到文件的情况发生。 - **使用绝对路径时**,虽然可以更精确地定位...

    path与classpath区别

    而Java的各种操作命令是在其安装路径中的bin目录下,所以在path中设置了JDK的安装目录后就不用再把Java文件的完整路径写出来了,它会自动去path中设置的路径中去找。 classpath的作用 classpath是指定你在程序中所...

    java文件路径获取

    本文将详细介绍Java中获取文件路径的各种方法及其应用场景,帮助开发者更好地理解和掌握这些技巧。 #### 二、基本概念 在深入讨论之前,我们需要了解几个基本概念: - **Classpath**: 是Java运行环境的一个重要...

    Java或web中解决所有路径问题

    1. **ClassPath路径**:这是Java虚拟机启动时加载类库(class or lib)的路径,也是加载项目自定义类的位置。 2. **WebRoot路径**:这是Web应用的根目录,包含了所有的静态资源、JSP页面以及Web-INF目录下的配置文件和...

    Java 实例 - classpath使用实例-classpath使用教程-手把手教程.zip

    在Java编程环境中,classpath是一个至关重要的概念,它决定了Java虚拟机(JVM)在哪里寻找所需的类文件。本教程将深入探讨classpath的使用,并提供手把手的实践指导,帮助开发者更好地理解和运用这一关键设置。 首先...

Global site tag (gtag.js) - Google Analytics