日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

jdk12源代码文件_在JDK 11中启动单文件源代码程序

發布時間:2023/12/3 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 jdk12源代码文件_在JDK 11中启动单文件源代码程序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

jdk12源代碼文件

JEP 330 –啟動單文件源代碼程序是即將發布的JDK 11(18.9)發行版中令人興奮的功能之一。 此功能允許直接使用java解釋器執行Java源代碼。 源代碼在內存中編譯,然后由解釋器執行。 限制是必須在同一文件中定義所有類。

對于剛開始學習Java并想嘗試簡單程序的人來說,此功能特別有用。 此功能與jshell一起,對于任何學習該語言的初學者來說都是一個很好的工具集。 不僅它們,而且專業人員也可以使用這些工具來探索新的語言更改或嘗試未知的API。

在本文中,我不會詳細介紹如何實現此功能,而是將通過嘗試不同的示例來重點介紹如何使用此功能。 讓我們從最簡單的示例開始,像往常一樣,Hello World!

最簡單的例子

下面的代碼保存在文件HelloWorld.java

public class HelloWorld{public static void main(String[] args){System.out.println("Hello World!!!");} }

我將運行上面的代碼,如下所示:

PS G:\samples\java11\single-file> java HelloWorld.java Hello World!!!

在上面的示例中,只有一個類,它包含main方法。 使用java執行代碼時,我們需要將以.java擴展名結尾的文件的名稱傳遞給它。 如果文件名不以.java擴展名結尾,那么我們必須使用--source選項,如我們在下一個示例中看到的那樣。

帶有命令行參數

讓我們增強Hello Worl程序,為每個人創建個性化的問候:

public class Greeting{public static void main(String[] args){if ( args == null || args.length < 1 ){System.err.println("Name required");System.exit(1);}System.out.println(String.format("Hello %s!!", args[0]));} }

讓我們將上面的代碼存儲在名為HelloGreeting.java的文件中。 請注意,文件名與公共類的名稱不匹配。 讓我們使用以下代碼運行上面的代碼:

PS G:\samples\java11\single-file> java HelloGreeting.Java sana Hello sana!!

在要執行的文件名之后提供給代碼的任何參數。 讓我們將HelloGreeting.java重命名為greeting然后嘗試使用相同的方法執行:

PS G:\samples\java11\single-file> java greeting sana Error: Could not find or load main class greeting Caused by: java.lang.ClassNotFoundException: greeting

您可以看到,在沒有.java的情況下,解釋器正在通過提供的名稱作為參數來查找編譯的類。 在這種情況下,我們需要使用--source選項,如下所示:

PS G:\samples\java11\single-file> java --source 11 greeting sana Hello sana!!

讓我向您展示當使用--source選項時,為JDK 10編寫的代碼如何不適用于JDK 9:

public class Java10Compatible{public static void main(String[] args){var message = "Hello world";System.out.println(message);} }

讓我們對JDK 10和JDK 9執行以上操作,如下所示:

PS G:\samples\java11\single-file> java --source 10 Java10Compatible.java Hello world PS G:\samples\java11\single-file> java --source 9 Java10Compatible.java .\Java10Compatible.java:3: error: cannot find symbolvar message = "Hello world";^symbol: class varlocation: class Java10Compatible 1 error error: compilation failed

單個文件中包含多個類

如前所述,該功能支持運行在單個文件中的代碼,因此文件中的類數沒有限制。 讓我們看一下包含兩個類的示例代碼:

public class SimpleInterest{public static void main(String[] args){if ( args == null || args.length < 3 ){System.err.println("Three arguments required: principal, rate, period");System.exit(1);}int principal = Integer.parseInt(args[0]);int rate = Integer.parseInt(args[1]);int period = Integer.parseInt(args[2]);double interest = Maths.simpleInterest(principal, rate, period);System.out.print("Simple Interest is: " + interest);} }public class Maths{public static double simpleInterest(int principal, int rate, int period){return ( principal * rate * period * 1.0 ) / 100;} }

讓我們運行這個:

PS G:\samples\java11\single-file> java .\SimpleInterest.java 1000 2 10 Simple Interest is: 200.0

對于定義了多個類的文件,第一類應包含main方法,并且在內存中編譯后的解釋器將使用第一類來啟動執行。

使用模塊

使用選項--add-modules=ALL-DEFAULT可以將內存中編譯的代碼作為未命名模塊的一部分運行。 這使代碼可以使用不同的模塊,而無需使用module-info.java顯式聲明依賴關系。

讓我們看一下使用新的HTTP客戶端API進行HTTP調用的代碼。 這些在Java 9中作為孵化器功能引入的API已從孵化器移至java.net.http模塊。 示例代碼為:

import java.net.http.*; import java.net.http.HttpResponse.BodyHandlers; import java.net.*; import java.io.IOException;public class ExternalModuleDepSample{public static void main(String[] args) throws Exception{HttpClient client = HttpClient.newBuilder().build();HttpRequest request = HttpRequest.newBuilder().GET().uri(URI.create("https://reqres.in/api/users")).build();HttpResponse<String> response = client.send(request, BodyHandlers.ofString());System.out.println(response.statusCode());System.out.println(response.body()); } }

我們可以通過發出以下命令來運行以上代碼:

PS G:\samples\java11\single-file>java ExternalModuleDepSample.java 200 {"page":1,"per_page":3,"total":12,"total_pages":4, "data":[{"id":1,"first_name":"George","last_name":"Bluth", "avatar":"https://s3.amazonaws.com/uifaces/faces/twitter/calebogden/128.jpg"}, {"id":2,"first_name":"Janet","last_name":"Weaver", "avatar":"https://s3.amazonaws.com/uifaces/faces/twitter/josephstein/128.jpg"}, {"id":3,"first_name":"Emma","last_name":"Wong", "avatar":"https://s3.amazonaws.com/uifaces/faces/twitter/olegpogodaev/128.jpg"}]}

這使我們能夠快速測試不同模塊中的新功能,而無需創建模塊, module-info文件等。

Shebang文件

在本節中,我們將研究創建shebang文件。 Shebang文件是通過使用語法#!/path/to/executable作為#!/path/to/executable的第一行提供執行程序,可以直接在Unix系統上執行的那些文件。

讓我們創建一個shebang文件:

#!/g/jdk-11/bin/java --source 11public class SimpleInterest{public static void main(String[] args){if ( args == null || args.length < 3 ){System.err.println("Three arguments required: principal, rate, period");System.exit(1);}int principal = Integer.parseInt(args[0]);int rate = Integer.parseInt(args[1]);int period = Integer.parseInt(args[2]);double interest = Maths.simpleInterest(principal, rate, period);System.out.print("Simple Interest is: " + interest);} }public class Maths{public static double simpleInterest(int principal, int rate, int period){if ( rate > 100 ){System.err.println("Rate of interest should be <= 100. But given values is " + rate);System.exit(1);}return ( principal * rate * period * 1.0 ) / 100;} }

如果文件名不遵循標準的Java文件名命名約定,則使用shebang中的source選項。 在我們的例子中,我們將上面的代碼保存在一個名為simpleInterest的文件中,可以這樣運行:

sanaulla@Sana-Laptop /g/samples/java11/single-file (master) $ ./simpleInterest 1000 20 2 Simple Interest is: 400.0

在Windows機器上,我使用了git安裝隨附的bash shell。 還有多種其他方式,例如Cygwin,Windows 10 Ubuntu支持等。

源代碼可以在這里找到。

翻譯自: https://www.javacodegeeks.com/2018/07/single-file-source-code-programs-jdk-11.html

jdk12源代碼文件

總結

以上是生活随笔為你收集整理的jdk12源代码文件_在JDK 11中启动单文件源代码程序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。