Javac:在当前要编译的Java文件中引用其他类(例如继承),并引用该引用类的。如果class文件不在当前目录中,则必须在javac命令后添加-CLASSPATH参数。编译器在编译时使用以下三种类型的方法指定

(1)。绝对路径:javac-class path c : juni JUnit . jar XXX . Java

(2)。相对路径:javac-classpath. juni junit.javrxxx.java

(3)。系统变量:javac-class path % class path % XXX . Java

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

金秋秋组织自己的下一张照片下面可以找到关于学习方法的小白秒,成为大神,一起交流学习有什么问题,金组织可以问我。每天在里面分享一些工作经验,随时可以帮助大家解决问题。因为时间有限,所以会及时答复的。(大卫亚设)。

64 03 5=(8322) 6550

使用Javac绝对路径:

Javac:假设要编译的类文件名为HelloWorld.java,完整路径为D:javaHelloWorld.java。但是,当前目录为c : documents and settings Peng。在这里进行编译会产生什么结果?

(1)。c : documents and settings Peng javac hello world . Java编译器显示以下错误消息:

error : cannot read : hello world . Java

这是因为默认情况下,javac在当前目录中查找类文件。此路径不是保存类文件的地方,因此报告了错误。

(2)。c : documents and settings Peng javac d : Java hello world . Java编译成功。

因此,只要运行javac命令的目录不是存储类文件的目录,就必须在javac命令中明确指定类文件的路径。

使用Java -classpath:

假设Java: CLASSPATH设置为D:pengjavapro,并且此目录中有三个名为hello world . Java/helloworldextendstestestests的文件,则这三个文件的类声明如下:

hello world . Java:public class hello world

hello worldex:public class helloworldextendshelloworld extends hello world

hello world ex:public class helloworldextendstestcase extends JUnit。

假设根据上面的javac -classpath和javac绝对路径使用情况,成功编译了三个文件。c : documents and settings Peng目录中现在有三个。运行class文件

(1)。c : documents and settings Peng Java hello world

hello wold

可以看到执行成功。为什么在c : documents and settings Peng中运行命令JVM可以找到d : Peng Java pro hello world . class文件?这是因为您配置了CLASSPATH系统变量并指向d : Peng Java pro目录。因此,JVM基本上是。不指定class文件的绝对路径,而是在该目录下加载类文件。

(2)。c : documents and settings Peng Java helloworldextendshelloworld

hello wold

可见执行成功了。HelloWorldExtendsHelloWorld继承HelloWorld类,因此在运行时,JVM首先检查CLASSPATH下是否存在HelloWorld.class文件。由于已成功编译HelloWorld类,因此可以成功运行helloworld类

(3). c : documents and settings Peng Java helloworldextendstestcase

exception in thread ' main ' Java . lang . noclassdeffounderror : JUnit/framework/test case

程序抛出异常,JUnit。可以看出找不到文件。

为什么在:pengjavapro下也能成功运行HelloWorldEx

行了呢?

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

(4). C:Documents and Settingspeng>java -classpath %CLASSPATH% HelloWorldExtendsTestCase

Hello World

  • -classpath 类路径
  • 设置用户类路径,它将覆盖 CLASSPATH 环境变量中的用户类路径。若既未指定 CLASSPATH 又未指定 -classpath,则用户类路径由当前目录构成。有关详细信息,请参阅设置类路径。
  • 若未指定 -sourcepath 选项,则将在用户类路径中查找类文件和源文件。
  • -sourcepath 源路径
  • 指定用以查找类或接口定义的源代码路径。与用户类路径一样,源路径项用分号 (:) 进行分隔,它们可以是目录、JAR 归档文件或 ZIP 归档文件。如果使用包,那么目录或归档文件中的本地路径名必须反映包名。
  • 注意:通过类路径查找的类,如果找到了其源文件,则可能会自动被重新编译。

这里-classpath和-sourcepath指定的都是被编译的源文件需要调用另外的用户自定义类或源文件的位置。

可以理解为

  1. -classpath用来指定搜索类文件(*.class文件)的路径,-sourcepath用来指定搜索源文件(*.java文件)的路径
  2. 如果未指定-sourcepath,那边将会在classpath指定的路径中查找类文件(*.class文件)和源文件(*.java文件)
  3. 如果找到了源文件(*.java文件),可能会重新生成类文件(*.class文件)

金秋秋组织自己下图片下是组织好 找对学习方法小白秒变大神,一起交流学习有什么问题大家可以金组织问我,每天都会在里面分享一些工作经验给大家,也会不定时帮大家解决问题的,由于时间有限看到会及时回复大家的

64+03+5=(8322)¥

总结:

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

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