1.1、JAVA入门纠错
在JAVA入门这篇文章里有些问题和错误需要纠正,懒得再改那篇文章了,直接写在这好了。
package test.test1;public class HelloWorld {public static void main(String[] args) {System.out.println("Hello World");}
}
在之前的文章里,我将HelloWorld.java文件放在了E盘根目录下,然后自己创建了:E:\test\test1这个目录。然后执行了javac -encoding utf-8 -d . HelloWorld.java,.class文件也正常生成在了目标路径下。然后也能正常运行。
但是我忘记说这个命令需要注意当前工作目录了!
假设我的当前工作目录是:E:\test\test1,然后执行javac -d . HelloWorld.java,会发生下面的状况:


它在这个test1文件夹下又创建了一个\test\test1!因为这条命令里javac的执行逻辑如下:
- 读取你的
.java文件; - 发现
package test.test1;,在当前目录(.)下创建test\test1\HelloWorld.class(由-d指定)。
javac 编译器在编译时,并不会强制检查源文件的物理路径是否和 package 声明一致,它只做上面的两件事。
关于-d指令:-d 是 javac(Java 编译器)命令中的一个非常重要且常用的选项,它的全称是 “destination”,意思是:指定编译后生成的 .class 文件存放的根目录。格式如下:
javac -d <目标目录> <源文件>.java
如果我在E:\test\test1这个目录使用命令行,然后执行javac -d . HelloWorld.java,因为javac没有在这个目录里找到\test\test1这个目录,那么它就会自动创建子目录:
E:\test\test1\test\test1\HelloWorld.class ❌ 错了!
正确做法就是我之前上一篇文章的演示,在E盘根目录下执行该命令。
那如果你不小心将.java文件放在这个目标文件夹下,还想要正常执行编译的话得换个命令:


其实这种做法更加方便,因为当前工作目录就是package指定路径所以可以直接用javac编译。
如果源代码里有中文就改成javac -encoding utf-8 HelloWorld.java。
我个人更加推荐这种做法,把源文件放在目标路径下更符合标准,也方便文件管理,而且IDEA创建JAVA类也是这么干的。