执行Java类文件报错:找不到或无法加载主类问题咨询
为什么
java ClassFileName报找不到主类,java -cp . ClassFileName却能正常运行? 这问题我碰到过好多次啦,本质就是Java的**类路径(Classpath)**在搞事情!下面给你掰扯清楚:
核心原因:默认类路径不包含当前目录
当你直接执行java ClassFileName时,Java虚拟机(JVM)会去系统默认的类路径里查找对应的.class文件。但很多时候,你的系统环境变量CLASSPATH可能被配置成了不包含当前目录(用.表示),或者干脆没有设置CLASSPATH——这时候JVM的默认类路径规则也不会自动包含当前目录,自然找不到你在当前文件夹下编译好的类文件。
java -cp . ClassFileName为什么能解决问题?
-cp(全称-classpath)是Java命令的参数,用来手动指定JVM搜索类文件的路径:
- 这里的
.代表当前工作目录,也就是你打开终端时所在的文件夹 - 加上这个参数后,JVM就会优先在当前目录里查找你要运行的
ClassFileName.class文件,所以就能成功找到并执行了
额外补充几个小细节
- 如果你用
javac直接编译.java文件,默认会把生成的.class文件放在当前目录,所以必须让JVM能搜到这个目录才能运行 - 要是你的
CLASSPATH环境变量里本来就包含.,那直接用java ClassFileName也能正常运行——但现在很多环境默认不会这么配置,所以才会出现这个问题 - 如果你把
.class文件放到了其他目录,也可以把那个目录加到-cp后面,比如java -cp /home/myclasses ClassFileName
内容的提问来源于stack exchange,提问作者Syama Ravi Teja Jerrypothula
相关产品推荐
相关产品推荐

