java找不到主类_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,结果如下:

f0e98ae4e56eb178a76e2e2fe68cba38.png

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

二、

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

三、

fbc10c7af38717ca73abdc95b5af2983.png

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

两者运行情况如下:

ea5388988c255b97be6a9dbaa685563c.png

对于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中。

以上全属推论。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值