當前位置: 妍妍網 > 碼農

為了幫新人上手,多年來 Java 偷偷做了這個改進。。

2024-03-25碼農

作為一個準備入門 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 原始碼檔提供的程式。


👇🏻 點選下方閱讀原文,獲取魚皮往期編程幹貨。

往期推薦