`

转javac -classpath的使用

阅读更多
javac -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 实例 - classpath使用实例-classpath使用教程-手把手教程.zip

    - 使用`javac`命令编译所有源文件,生成相应的.class文件。 - 设置classpath,运行主类,确保JVM能找到其他依赖的类。 6. **开发工具中的classpath管理**: - IDEs如Eclipse、IntelliJ IDEA等,都提供了图形化...

    javac--------src

    4. **代码生成**:最后,javac使用类FileWriter生成对应的.class文件,这些文件包含了字节码,可以被JVM执行。生成字节码的过程涉及类文件格式、常量池、方法定义等多个方面。 5. **错误和警告处理**:javac在编译...

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

    3. **系统变量**:使用环境变量`CLASSPATH`,如`javac -classpath %CLASSPATH% Xxx.java`。这样,Java编译器会使用系统环境变量`CLASSPATH`中定义的路径。 举个例子,如果你有一个名为`HelloWorld.java`的源文件,...

    plexus-compiler-javac-1.8.1.jar.zip

    java jar包,亲测试可用 ...把一个JAR文件添加到系统的classpath环境变量之后,java通常会把这个JAR文件当做一个路径来处理。通常使用jar命令来压缩,可以把一个或多个路径全部压缩成一个JAR文件。

    java命令行详解

    javac -classpath .;c:\lib\mylib.jar MyClass.java ``` ##### 3. `-sourcepath | -sp <path>` - **作用**:指定源文件的搜索路径,通常用于多模块项目。 - **示例**: ```shell javac -sourcepath src ...

    plexus-compiler-javac-2.2.jar.zip

    java jar包,亲测试可用 ...把一个JAR文件添加到系统的classpath环境变量之后,java通常会把这个JAR文件当做一个路径来处理。通常使用jar命令来压缩,可以把一个或多个路径全部压缩成一个JAR文件。

    exmaple_google_oauth2_java.zip

    一套完整的 google drive 认证系统,可以根据以下命令编译... javac -sourcepath src -d bin -classpath "lib/*;" @src.list copy client_secrets.json bin\ java -classpath "bin;lib/*;" com.google.oauth2.Oauth2

    java与javac命令详解

    * -classpath <路径>:指定将使用的类路径或要使用的封装类的 .jar 文件的路径。 * -d <目录>:指定 Java 源文件编译之后生成的字节码 .class 文件的存放位置。 source 指 Java 源文件名,包括文件扩展名 .java。 ...

    java中path和classpath的设置

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

    dropbox_oauth2.zip

    javac -sourcepath src -d bin -classpath "lib/*;" @src.list copy app.info bin\ java -classpath "bin;lib/*;" com.dropbox.oauth2.Oauth2 此示例程序所用dropbox java api库由自己编译不是最新,如需最新...

    Portfolio-Catalog-Duplicator

    编译: javac -classpath dam-client.jar:. Base64.java Duplicate.java javac -classpath dam-client.jar:. Base64.java Duplicate.java 运行: java -classpath dam-client.jar:. Duplicate java -classpath dam...

    javac-source-code-reading:javac源码调试-java source code

    2. **编译选项**:javac 接受多种命令行选项,如 `-g` 用于生成调试信息,`-classpath` 指定类路径等。这些选项在 `com.sun.tools.javac.main.Options` 类中管理。 3. **错误和警告**:`...

    关于classpath

    本文将深入探讨classpath的基本原理、配置方式以及如何确保`javac`正确编译运行Java文件。 ### 1. classpath概述 在Java中,每个`.class`文件都代表一个类。当运行Java程序时,JVM需要知道这些类文件的存放位置。...

    Throwback:基于某人的听力历史记录的播放列表生成工具

    向Last.fm抛出拉胡尔·卡纳(Rahul Khanna)的倒推如何运行和编译代码:在带有Java源文件的目录中,键入以下命令: 在Mac上: javac -classpath jsoup-1.7.2.jar * .java java -classpath。:jsoup-1.7.2.jar回滚在...

    编译时提示软件包javax.servlet.http不存在,如何解决

    例如,javac -classpath ./test.jar TestJar.java 将使用 ./test.jar 作为类搜索路径来编译 TestJar.java 文件。 Java 编译和运行时的类搜索路径 在 Java 编译和运行时,类搜索路径是非常重要的。它指定了 Java ...

    java如何设置JAVA_HOME,path,classpath及其作用

    - 允许用户在任何目录下直接使用`java`命令,而无需指定完整的路径。 - 提高命令行工具的便捷性,简化操作流程。 #### 三、Classpath的设置与作用 **Classpath**环境变量指定了Java虚拟机(JVM)搜索用户自定义类...

    Monopoly:Java中的垄断游戏

    sourcepath src -d classes src/monopoly/gui /*.java javac -sourcepath src -d classes src/monopoly/game/*.java javac -sourcepath src -d classes src/monopoly/properties /*.java java -classpath classes ...

    javac命令的使用(含有包名)

    在这个主题中,我们将深入探讨如何在含有包名的情况下使用`javac`命令,并理解`classpath`的重要性。通过一个简单的例子,我们将展示如何正确地编译和运行包含包结构的Java程序。 首先,让我们了解`javac`命令的...

    p2p:操作系统3的项目1-2015年9月12日

    javac -classpath ../lib/jade.jar:. Nodo.java 运行JADE平台: java -classpath ../lib/jade.jar jade.Boot -gui -host localhost 运行文件的分发服务器: java -classpath ../lib/jade.jar:. jade.Boot -...

Global site tag (gtag.js) - Google Analytics