JDK11 | 第五篇 : 启动单个Java源代码文件的程序

文章首发于公众号《程序员果果》java

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

1、简介

JEP330-启动单文件代码程序(Launch Single-File Source-Code Programs),是JDK11中一个很不错的功能。这个功能容许你直接使用java解析器运行java代码,java文件会在内存中执行编译而且直接执行。惟一的约束在于全部相关的类必须定义在东一个java文件中。shell

2、实例

案例1

建立一个 Test.java 文件 ,代码以下:微信

public class Test {

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

执行上面的代码this

jdk11以前 :code

javac Test.java
java Test

jdk11:blog

java Test.java

结论:jdk11中,经过 java xxx.java 命令,就可直接运行源码文件程序,并且不会产生.class 文件。内存

案例2

问题:若是一个java文件中存在多个类 ,经过 java xxx.java 运行源码文件,会执行哪个main方法 ?get

建立一个 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文件中。

3、结论

经过上面的三个案例,我得出如下结论:

  • jdk11中,经过 java xxx.java 命令,就可直接运行源码文件程序,并且不会产生.class 文件。
  • 一个java文件中包含多个类时,java xxx.java 执行排在最上面的一个类的main方法。
  • java xxx.java 启动单个Java源代码文件的程序时,相关个类必须定义在同一个java文件中。

关注我


欢迎扫码或微信搜索公众号《程序员果果》关注我,更多精彩内容不能错过 ~~

(转载本站文章请注明做者和出处 程序员果果的博客

相关文章
相关标签/搜索