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類也是這麼幹的。