JAVA初学:错误: 找不到或无法加载主类 test

版权声明:聂CC~ https://blog.csdn.net/ncc1995/article/details/84932759

以上是报的错误。

1. 使用eclipse写了一个hello world程序。

在eclipse中执行起来并没有问题。

之后想试一下通过终端命令来执行:

//生成class文件
javac test.java
//输出结果
java test

在第二步的时候报了上述错误。

2. 忽略了package影响。

  • 在eclipse写的代码保存路径如下。

  •  执行javac test.java会在此文件夹下生成class文件。

  • 按照正常情况执行java test就会输出结果,但是却报了错。

查了下资料,说java中完整的类名应该是包名+类名。然后可以发现,在写代码的时候,有一个包名test。所以正确的执行方式应该是java test.test。

但是发现还是错误。

可以看到我们是在test目录下执行的该命令,java会以为路径是D:\c\eclipse-workspace\test\src\test\test\test。(好吧,我不该把名字都取为test的)。

所以执行这个命令的时候,应该在src目录下来执行。

  •  java执行class文件对package的路径是强依赖的。它在执行的时候会严格以当前用户路径为基础,按照package指定的包路径转化为文件路径去搜索class文件。

  • 程序在运行的时候具体是如何确定.class文件位置的呢?

           来看看Java解释器的运行过程吧:首先,找出环境变量CLASSPATH(可以通过操作系统来设置)。CLASSPATH包含一个或多个目录,用作查找.class文件的根目录。从根目录开始,解释器获取包名称并将每个句点替换成反斜杠,以从CLASSPATH根中产生一个路径(例如,package fruit.Apple就变成为fruit/Apple或fruit/Apple或其他,这将取决于操作系统)。得到的路径会与CLASSPATH中的各个不同的根目录路径相连接以获得一个完整的目录路径,解释器就在这些目录中查找与你所需要的类名称相同的.class文件。(此外,解释器还会去查找某些涉及Java解释器所在位置的标准目录。)

  • 所以在这里吗java寻找的就是classpath+package名

 

参考链接:https://www.cnblogs.com/wangxiaoha/p/6293340.html

                  https://www.cnblogs.com/diegodu/p/5834251.html

猜你喜欢

转载自blog.csdn.net/ncc1995/article/details/84932759