Hello, Java
May 16, 2022如果你寫了第一個 HelloWorld.java:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, Java");
}
}
單就一個簡單的 Hello, World 而言,Java 寫來是比較囉嗦一些啦!因為其中就包含了定義類別、程式進入點等動作,就初學而言,就只要知道這麼寫就對了啦!
Hello, World 寫來越簡單,程式語言越棒?你一定是搞錯了什麼!不然我的玩具語言也很棒囉?
這個 .java 放在 C:\workspace中,然後如下切換至 C:\workspace,並執行 javac
指令:
C:\workspace>javac HelloWorld.java
'javac' 不是內部或外部命令、可執行的程式或批次檔。
C:\workspace>
如果你是透過 Oracle JDK 安裝程式,不會遇到這個問題,因為它會自動幫你設好接下來要談到的 PATH
,不過,建議還是要認識接下來的 PATH
設定。
PATH?
如果你安裝了 JDK,卻會出現以上的問題,這是(Windows)作業系統在跟你抱怨,它找不到 javac
放在哪邊!當要執行一個工具程式,那個指令放在哪,系統預設是不曉得的,除非你跟系統說工具程式存放的位置。例如:
C:\workspace>"C:\Program Files\Java\jdk-17\bin\javac" HelloWorld.java
C:\workspace>
javac
編譯成功後會靜稍稍地結束,所以沒看到訊息就是好消息,但是這樣下指令實在太麻煩了。
當你鍵入一個指令而沒有指定路徑資訊時,作業系統會依照 PATH
環境變數中設定的路徑順序,依序尋找各路徑下是否有這個指令。可以執行 echo %PATH%
來看看目前系統 PATH
環境變數中包括哪些路徑資訊:
C:\workspace>echo %PATH%
C:\Program Files\Java\jdk-17\bin;C:\workspace\gradle-6.8.3\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Greenware\gradle-6.7\bin;C:\Program Files\Git\cmd;C:\Program Files\Go\bin;C:\Greenware\ghc-9.2.1-x86_64\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Greenware\node-v14.16.1-win-x64;C:\Winware\Python39\Scripts\;C:\Winware\Python39\;C:\Users\Justin\AppData\Local\Microsoft\WindowsApps;C:\Winware\miniconda3\Scripts;C:\Users\Justin\go\bin;C:\Greenware\hugo_0.89.4
C:\workspace>
依上圖的 PATH
資訊,如果鍵入 javac
指令,系統找完 PATH
所有路徑後,都不會找到 javac
工具程式,當所有路徑都找不到指定的工具程式時,就會出現剛剛第一張圖的錯誤訊息。
你要在 PATH
中設定工具程式的路徑資訊,系統才可以在 PATH
中找到你要執行的指令。Windows 如果要設定 PATH
,可以使用 SET
指令來設定,設定方式為 SET PATH=
路徑。例如:
C:\workspace>set PATH="C:\Program Files\Java\jdk-17\bin\javac";%PATH%
C:\workspace>javac HelloWorld.java
C:\workspace>
完成編譯 HelloWorld.java 後,同一資料夾下會出現 HelloWorld.class,JVM 的可執行檔副檔名就是 .class,接下來要啟動 JVM,要求 JVM 執行 HelloWorld
指令:
C:\workspace>java HelloWorld
Hello, Java
C:\workspace>
啟動 JVM 的指令是 java
,要求 JVM 執行 HelloWorld
時,只要指定類別名稱,不用附加 .class 副檔名。
直譯 .java/jshell
對於單一原始碼的簡單小程式,每次都得以 javac
編譯為 .class 後再以 java
執行覺得麻煩嗎?Java SE 11 以後,可以使用 java
直接執行 .java 檔案,這會即時地編譯為位元組碼存放在記憶體,然後直接執行,例如:
C:\workspace>java HelloWorld.java
Hello, Java
C:\workspace>
如果懶得在測試一些程式片段時,還得如上定義類別、main
程式進入點、編譯、執行程式,Java SE 9 以後內建了 jshell
,這是 Java 版的 REPL(Read-Eval-Print Loop)環境,也就是一個簡單的,互動式的程式設計環境,可以直接使用 jshell
指令來進入該環境:
C:\workspace>jshell
| Welcome to JShell -- Version 17
| For an introduction type: /help intro
jshell> System.out.println("Hello, Java")
Hello, Java
jshell> 1 + 2
$2 ==> 3
jshell> $2
$2 ==> 3
jshell> 1 + $2
$4 ==> 4
jshell> $4
$4 ==> 4
jshell>
在指令互動環境中,$n
可以取用第 n 次運算結果;在指令互動環境下按 Home 可以將游標移至行首,按 End 可以將游標移至行尾。
jshell> for(var i = 0; i < 4; i++)
...> System.out.println(i);
0
1
2
3
jshell> void some() {
...> System.out.println("some here");
...> }
| created method some()
jshell> some()
some here
jshell> class Some {
...> }
| created class Some
jshell> new Some()
$10 ==> Some@2077d4de
jshell>
可以看到在 jshell
中,可以定義區塊、方法、類別等,也可以定義變數,如果程式有錯,出現的錯誤訊息,基本上就是編譯錯誤的訊息:
jshell> var x = 100
x ==> 100
jshell> System.out.println(x)
100
jshell> System.out.println(y)
| Error:
| cannot find symbol
| symbol: variable y
| System.out.println(y)
| ^
jshell>
如果想離開 jshell
環境,可以輸入 /exit
或者是按下 Ctrl+D,若需要指令說明,可以鍵入 /help
,也可以在執行 jshell
時,使用 --help
引數顯示說明。