Java找不到主类引发的探究

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java找不到主类引发的探究相关的知识,希望对你有一定的参考价值。

一、

同一目录下,两个文件

t.java

console.bat


t.java:

package t;
public class t{
	public static void main(String[] args){
		System.out.println("Hello world!");
	}
}

console.bat:

@ECHO OFF
SET JAVAHOME=D:\Java\JDK-8u91-1.8.0_91
SET PATH=%PATH%;%JAVAHOME%\bin;%JAVAHOME%\lib\dt.jar;%JAVAHOME%\bin\tools.jar;.;
cmd

(console在此处配置路径)

打开console.bat,在其中编译并运行t.java,结果如下:

技术分享


如果java靠环境变量找到java类文件,那么java t按理应该是可以运行的(因为当前目录已被包含在环境变量中,参见console.bat)


二、

如果把t.java中的package t;注释掉就可以运行。这就跟我们平常直接新建一个java文件,码码完直接命令行运行是一样的。这就可以用classpath来解释t.class是怎么被找到的。如果把当前路径去掉,又会提示找不到主类。所以,可以推断,主类是通过PATH中的路径找到的。可是这又怎么解释第一种情况呢?


三、

技术分享

如图,t1文件夹中也有一个t1.java文件,它跟t0.java的区别在于它有package t1;, 而t0.java并没有package语句。

两者运行情况如下:

技术分享

对于t0.java,一个是t0.class==classpath/t0/t0;一个是classpath+=t0,t0.class==classpath/t0。t1.java相似。依据上面的情况,也就是说,如果java命令后的类文件没有包含父目录,那么该源文件本身就没有package语句,反之。所以,java不仅靠PATH路径来找的类文件,而它还通过这两种殊途同归的方式来检查package,以至于不会发生这种“java文件自身声明所在包与实际所在包不符”的情况。


结论:java x/x/x/aClass能运行意味着aClass在package x.x.x中。


以上全属推论。

本文出自 “Doerthous” 博客,请务必保留此出处http://doerthous.blog.51cto.com/11762533/1792771

以上是关于Java找不到主类引发的探究的主要内容,如果未能解决你的问题,请参考以下文章

找不到或无法加载主类java(找不到或无法加载主类helloworld)

错误:找不到或无法加载主类 Test.java

如何解决Eclipse下“找不到或无法加载主类”的错误

Java文件不能运行(找不到或无法加载主类)怎么解决。

错误: 找不到或无法加载主类 ArrayListMagnet?

java运行时找不到主类