JAVA 的classpath、path详解
大二下学习java的时候就没有注意一些细节上的问题,刚刚同学问了我给简单的怎么执行.class文件都犯了愁。报错找不到或无法加载主类,上网的博客整理了一下发现自己对于classpath真的是没有完全理解,特此整理。
CLASSPATH的作用:
classpath是指定你在程序中所使用的类(.class)文件所在的位置,就如在引入一个类时:import javax.swing.demo这句话是告诉编译器要引入javax.swing这个包下的demo类,而classpath就是告诉编译器该到哪里去找到这个类(前提是你在classpath中设置了这个类的路径);
如果我们想要编译在当前目录下找。就加上“.”,如:.;C:\Program Files\Java\jdk,这样编译器就会到当前目录和C:\Program Files\Java\jdk\去找javax.swing.demo这个类;
因为现在的开发环境很智能,像是intellij和eclipse写Java的话,不设classpath也没关系,因为ide会有自己的配置;
My error:
直接在桌面新建了一个程序hello.java:
public class hello{
public static void main(String[] args) {
System.out.println("Hello java!");
}
}
然后打开cmd命令行运行编译这个.java文件:
C:\Users\zm>javac C:\Users\zm\Desktop\hello.java
之后就在桌面直接生成了一个hello.class文件,之后年轻的我以为可以像编译java文件那样直接用文件的绝对路径来直接运行class文件,结果:
C:\Users\zm>java C:\Users\zm\Desktop\hello
错误: 找不到或无法加载主类 C:\Users\zm\Desktop\hello
原因: java.lang.ClassNotFoundException: C:\Users\zm\Desktop\hello
直接分析错误原因吧,java命令后面接的应该是一个类名,我这儿的话就是hello这个类
java命令运行.class文件不能直接用它的绝对地址。
这里我们的当前路径是:C:\Users\zm>,由于之前在classpath中设置了.;这个路径,所以就可以告诉编译器在当前目录下找这个hello类去运行它,但是我们的hello.class并不是在User\zm路径下的呀,所以如果想解决这个问题我们应该先通过命令行cd跳转到class文件所在路径,然后再执行它:
C:\Users\zm>cd Desktop
C:\Users\zm\Desktop>java hello
Hello java!
C:\Users\zm\Desktop>
可以看到就运行成功了,总结一下classpath就是告诉编译器该去哪去找class文件!要注意的是路径问题。
PATH的作用:
path是系统用来指定可执行文件的完整路径,即使不在path中设置JDK的路径也可执行Java文件,但必须把完整的路径写出来,如:
C:\Program Files\Java\jdk-10.0.2\javac C:\Users\zm\Desktop\hello.java。
java的各种操作命令是在其安装路径中的bin目录下,所以在path中设置了JDK的安装目录后就不用再把java文件的完整路径写出来了,它会自动去path中设置的路径中去找:
javac C:\Users\zm\Desktop\hello.java。
以上。