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