JDK11 | 第五篇 : 啟動單個Java源代碼文件的程序


文章首發於公眾號《程序員果果》

地址 : https://mp.weixin.qq.com/s/h1L4FmzVSix434gVt8Fc7w

一、簡介

JEP330-啟動單文件代碼程序(Launch Single-File Source-Code Programs),是JDK11中一個很不錯的功能。這個功能允許你直接使用java解析器運行java代碼,java文件會在內存中執行編譯並且直接執行。唯一的約束在於所有相關的類必須定義在東一個java文件中。

二、實例

案例1

創建一個 Test.java 文件 ,代碼如下:

public class Test {

    public static void main(String[] args) {
        System.out.println("Test ...");
    }
 
}

執行上面的代碼

jdk11之前 :

javac Test.java
java Test

jdk11:

java Test.java

結論:jdk11中,通過 java xxx.java 命令,就可直接運行源碼文件程序,而且不會產生.class 文件。

案例2

問題:如果一個java文件中存在多個類 ,通過 java xxx.java 運行源碼文件,會執行哪一個main方法 ?

創建一個 Test1.java 文件,代碼如下:

class Test2 { 
    public static void main(String[] args) {
        System.out.println("Test2");
    }
}

public class Test {

    public static void main(String[] args) {
        System.out.println("Test");
    }
 
}

通過 java Test.java 運行后輸出 "Test2"。

下面我們顛倒 Test Test2 兩個類的位置:

public class Test {

    public static void main(String[] args) {
        System.out.println("Test");
    }
 
}

class Test2 { 
    public static void main(String[] args) {
        System.out.println("Test2");
    }
}

通過 java Test.java 運行后輸出 "Test"。

結論:一個java文件中包含多個類時,java xxx.java 執行排在最上面的一個類的main方法。

案例3

問題:如果一個java文件中類的方法中調用了另一個java文件中類的方法,通過 java xxx.java 運行源碼文件,能運行通過嗎 ?

創建兩個java文件 Student.java 、Teacher.java。

Student.java:

public class Student { 

    public static void main(String[] args) {
        Teacher teacher = new Teacher();
        teacher.toString();
    }
}

Student.java:

public class Teacher {

    private String name;
    private String subject;

    public void setName(String name){
        this.name = name;
    }
    public String getName(){
        return name;
    }
    public void setSubject(String subject){
        this.subject = subject;
    }
    public String getSubject(){
        return subject;
    }
 
}

執行 java Student.java 報錯 :

Student.java:4: 錯誤: 找不到符號
        Teacher teacher = new Teacher();
        ^
  符號:   類 Teacher
  位置: 類 Student
Student.java:4: 錯誤: 找不到符號
        Teacher teacher = new Teacher();
                              ^
  符號:   類 Teacher
  位置: 類 Student
2 個錯誤

把 Student 和 Teacher 連個類 放在一個java文件中 ,重新運行,運行通過。

結論:java xxx.java 啟動單個Java源代碼文件的程序時,相關個類必須定義在同一個java文件中。

三、結論

通過上面的三個案例,我得出以下結論:

  • jdk11中,通過 java xxx.java 命令,就可直接運行源碼文件程序,而且不會產生.class 文件。
  • 一個java文件中包含多個類時,java xxx.java 執行排在最上面的一個類的main方法。
  • java xxx.java 啟動單個Java源代碼文件的程序時,相關個類必須定義在同一個java文件中。

關注我


歡迎掃碼或微信搜索公眾號《程序員果果》關注我,更多精彩內容不能錯過 ~~

(轉載本站文章請注明作者和出處 程序員果果的博客


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM