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

简介: JEP330-启动单文件代码程序(Launch Single-File Source-Code Programs),是JDK11中一个很不错的功能。这个功能允许你直接使用java解析器运行java代码,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文件中。
相关文章
|
8天前
|
Java
【Java开发指南 | 第二十一篇】Java流之文件
【Java开发指南 | 第二十一篇】Java流之文件
14 0
|
2天前
|
小程序 前端开发 Java
Java程序的种类和结构
Java程序的种类和结构
|
3天前
|
缓存 算法 Java
如何提高Java程序的性能?
Java是一种非常流行的编程语言,但是在处理大规模数据和高并发时,程序性能容易受到影响。本文将分享一些提高Java程序性能的技巧。
|
6天前
|
消息中间件 Java Kafka
Java大文件排序(有手就能学会),kafka面试题2024
Java大文件排序(有手就能学会),kafka面试题2024
|
8天前
|
搜索推荐 算法 Java
滚雪球学Java(29):数组长度和排序算法:让你的程序更高效
【5月更文挑战第4天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
15 0
滚雪球学Java(29):数组长度和排序算法:让你的程序更高效
|
8天前
|
安全 Java 开发者
Java一分钟之-文件与目录操作:Path与Files类
【5月更文挑战第13天】Java 7 引入`java.nio.file`包,`Path`和`Files`类提供文件和目录操作。`Path`表示路径,不可变。`Files`包含静态方法,支持创建、删除、读写文件和目录。常见问题包括:忽略异常处理、路径解析错误和权限问题。在使用时,注意异常处理、正确格式化路径和考虑权限,以保证代码稳定和安全。结合具体需求,这些方法将使文件操作更高效。
11 2
|
8天前
|
移动开发 前端开发 Java
STS里的java 工程项目名称修改和目录设置成源代码
STS里的java 工程项目名称修改和目录设置成源代码
|
8天前
|
前端开发 Java 应用服务中间件
【异常解决】java程序连接MinIO报错The request signature we calculated does not match the signature you provided.
【异常解决】java程序连接MinIO报错The request signature we calculated does not match the signature you provided.
28 0
|
8天前
|
Java 开发者
Java一分钟之-Java IO流:文件读写基础
【5月更文挑战第10天】本文介绍了Java IO流在文件读写中的应用,包括`FileInputStream`和`FileOutputStream`用于字节流操作,`BufferedReader`和`PrintWriter`用于字符流。通过代码示例展示了如何读取和写入文件,强调了常见问题如未关闭流、文件路径、编码、权限和异常处理,并提供了追加写入与读取的示例。理解这些基础知识和注意事项能帮助开发者编写更可靠的程序。
22 0
|
8天前
|
Java Linux C语言
一步带你了解java程序逻辑控制
一步带你了解java程序逻辑控制
20 2