以上是报的错误。
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