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 的方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下
java project和java web project项目中如何获得相对路径、绝对路径问题详解
下面小编就为大家带来一篇Java中获取类路径classpath的简单方法(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
java实现 获取指定路径下 指定格式 的所有文件
本篇文章主要介绍了Java中-classpath和路径的使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
环境变量配置 环境变量配置 1 理解环境变量的作用 2 学会配置环境变量 ...指定类搜索路径,让Java执行环境识别程序中使用的类库的位置。Java虚拟机就是通过ClassPath来寻找类的字节码文件。 JAVA_HOME 配置步
JAVA坏境变量中的JAVA_HOME path classpath 的设置与作用解释 适合初学者
文中指出尽量不要使用相对于System.getProperty(\\\"user....使用上面 ClassLoaderUtil类的public static URL getExtendResource(String relativePath)方法已经能够使用相对于classpath的相对路径定位所有位置的资源。
jdk路径设置,java_home,path,classpath
今天小编就为大家分享一篇关于JavaWeb项目中classpath路径详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
path的设置时为了,使我们在其他目录下运行java和javac命令的时候,同样可以找到给程序。
本篇文章是对获取JAVA路径,包括CLASSPATH外的路径的方法进行了详细的分析介绍,需要的朋友参考下
Java路径问题最终解决方案 —可定位所有资源的相对路径寻址 通过相对classpath路径实现自由寻找资源的助手类的源代码
在设置classpath环境变量之前,请确保已经正确配置了Java开发工具包(JDK)。 按照示例代码和步骤指导进行操作,特别是在配置环境变量时要注意路径的正确性和格式。 设置完classpath环境变量后,重新打开命令提示符...
Classpath Variable 解决办法
1.JAVAHOME就是安装目录.用在 PATH,CLASSPATH的设置中免去了你再写一长串的路径,用JAVAHOME就代替安装目录. 2.PATH:用于列出可执行文件的搜索路径....只有在classpath设置的路径中的类才能被加载.
java -classpath .class的类路径(如果是包的话,需要指定到包上面的路径);引用的类路径 xx.xx.aaa (如果是javac的话需要 javac xx\xxx\aaa.java,必须用路径的形式) 注意如果源文件的结构是Package的话,classpath...
jkd配置信息:path的值,classpath的值,以及java_home的配置信息和java的安装路径。
获取当前执行的classpath的所有jar包的路径 * 3.通过java的ToolProvider创建JavaCompile,用来执行class源文件 * 4.创建DiagnosticCollector用来执行获取执行失败的错误结果 * 5.添加动态执行的编译环境 options ...
下面小编就为大家分享一篇基于java类路径classpath和包的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧