作為一個準備入門 Java 的新手程式設計師來說,第一件事兒可能就是要下載一個 IDEA ,如果說有什麽 IDE 比 IDEA 還大的話,那恐怕也就是 Visual Studio 了。 下載完了還可能一頭懵,不知道從何下手。
記得作者剛接觸 Java 的時候,那時候還在做 .NET(C#) ,然後對 Python 也比較熟悉。
對於 Python 來說,一個新手裝完 Python ,連 IDE 都不用裝,就可以在終端中用命令列的方式體驗一下互動式編程了,寫個 Hello World 也就算了入門了。
而對於 C# 來說,雖說 Visual Studio 好幾個G,但是裝完之後,一切也就準備好了,建一個命令列計畫,寫個 Hello World 也算入門了。
但是當初我剛下載完 IDEA 之後,準備建一個命令列套用,找了半天沒找到(我以為根本沒這個選項,直到很久之後我才發現用 IDEA 怎麽建立命令列套用)。結果,我本就準備寫個 Hello World 體驗一下,發現還要用 Maven 或 Gradle 建立,要知道對於一個 Java 都沒入門的人來說,Maven 和 Gradle 只會讓人更加糊塗。
如果不用 Maven 或 Gradle 呢,建立一個 java 檔,還要用
javac
編譯。
javac
是什麽好像更讓人迷糊了。
Java 也考慮到這個問題了,讓準備入門或體驗Java的同學,能夠以更快、更簡單的方式嘗試一下 Hello World,不用下載 IDE,不用自己手動編譯,只要抄一段 Hello World,直接一個java 命令執行就好了,像 Python 一樣簡單。
Java 8 確實有些麻煩
假設我們抄了一段 Java 程式碼,一個
Moon.java
類,裏面一個
main
方法,輸出一個
Hello
。
public classMoon{
publicstaticvoidmain(String[] args){
System.out.println("Hello");
}
}
沒有 IDE 的情況下,我們嘗試了一下
java Moon
、
java Moon.java
。
發現都不行,所以,如果我們想要執行
Moon
的
main
方法,要先用
javac
進行編譯。
javac Moon.java
編譯成功後,會在
Moon.java
的目錄中出現一個
Moon. class
的編譯後的檔,這個就是字節碼檔,JVM 只認這種格式。
然後我們在用
java
命令來執行
Moon
類,才能夠執行成功。
java - classpath . Moon
這時,就能看到
main
方法執行成功了,註意其中的
- classpath .
參數是告訴 Java 去當前目錄尋找類檔
Moon
。
現在改的稍微復雜一些了,新加了一個類檔。
Helper.java
檔
public classHelper{
publicstaticvoidsayHello(){
System.out.println("Hello");
}
}
然後
Moon.java
類在
main
方法中呼叫 Helper.sayHello 方法。
public classMoon{
publicstaticvoidmain(String[] args){
Helper.sayHello();
}
}
那之後再編譯的話,就要把這兩個 Java 檔都包含在
javac
的命令中。
javac Moon.java Helper.java
之後仍然可以正常執行
java - classpath . Moon
JDK 11 之後
而在 JDK 11 之後,就沒這麽麻煩了,有點像 Python 那種解釋型語言了,直接寫完就可以執行了。
仍然是那個輸出
Hello
的
Moon
類。
public classMoon{
publicstaticvoidmain(String[] args){
System.out.println("Hello");
}
}
直接執行
java Moon.java
就行了。
但是,問題來了,如果是兩個檔,就像 JDK 8 的那個例子,
Moon.java
呼叫了另一個
Helper.java
的方法,大於1個類檔的情況,那還是不行,仍然還是要先編譯。
JDK 22 之後
前幾天 JDK22 已經釋出了,我一看,嘿,JDK22竟然又做了調整,解決了多個檔呼叫的問題。
Moon.java
呼叫了另一個
Helper.java
的方法,現在,我們怎麽做呢。
直接
java Moon.java
,然後就可以了!
這是因為增強了 java 啟動器的原始檔模式,以便能夠執行作為多個 Java 原始碼檔提供的程式。
👇🏻 點選下方閱讀原文,獲取魚皮往期編程幹貨。
往期推薦