JDK11 | 第五篇 : 启动单个Java源代码文件的程序
文章首发于公众号《程序员果果》
一、简介
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文件中。
关注我

欢迎扫码或微信搜索公众号《程序员果果》关注我,更多精彩内容不能错过 ~~
(转载本站文章请注明作者和出处 程序员果果的博客)
JDK11 | 第五篇 : 启动单个Java源代码文件的程序的更多相关文章
- 第五篇--VS2017如何生成Dll文件
参考资料: https://blog.csdn.net/qq_34097715/article/details/79540933 https://www.cnblogs.com/RascallySna ...
- 批量将Java源代码文件的编码从GBK转为UTF-8
主要参考: http://blog.csdn.net/liu_qiqi/article/details/38706497 使用common io批量将java编码从GBK转UTF-8 http://w ...
- Eclipse:批量将Java源代码文件的编码从GBK转为UTF-8
很简单的几行代码,就可以批量将GBK格式的java文件转为UTF-8格式. 基本上所有文本文件的编码转换都可以采用这种方式. import java.io.File; import java.io.I ...
- 如何将Java源代码文件的编码从GBK转为UTF-8?
有时候看到有意思的demo,在头痛导入项目的编码和workspace的编码不一样的时候 我试着将 笔记本打开一个类一个类的复制, demo的类比较少的时候 可以忍受,demo的类多的时候 除了靠之外 ...
- Python之路【第五篇】:Python基础之文件处理
阅读目录 一.文件操作 1.介绍 计算机系统分为:计算机硬件,操作系统,应用程序三部分. 我们用python或其他语言编写的应用程序若想要把数据永久保存下来,必须要保存于硬盘中,这就涉及到应用程序要操 ...
- spring-core-5.0.6.RELEASE-sources.jar中java源代码不全
笔者最近在调试一段代码,进入spring-core以后,IDEA帮我反编译出源码,其中MethodProxy.java如下 // // Source code recreated from a .cl ...
- JD-GUI反编译jar包为Java源代码
程序员难免要借鉴其他java工程的代码.可有时只能拿到.calss文件,jar包或者war包,这个时候要求程序员能熟练的将这些类型文件反编译为Java代码并形成可编译运行的项目.本文介绍的反编译工具是 ...
- 第五篇 :微信公众平台开发实战Java版之如何获取公众号的access_token以及缓存access_token
一.access_token简介 为了使第三方开发者能够为用户提供更多更有价值的个性化服务,微信公众平台 开放了许多接口,包括自定义菜单接口.客服接口.获取用户信息接口.用户分组接口.群发接口等, 开 ...
- 一篇很好的学习查看Java源代码的文章
目录: 一. ArrayList概述 二. ArrayList的实现 1) 私有属性 2) 构造方法 3) 元素存储 4) 元素读取 5) 元素删除 6) 调整数组容量 ...
随机推荐
- php内置函数分析之array_combine()
PHP_FUNCTION(array_combine) { HashTable *values, *keys; uint32_t pos_values = ; zval *entry_keys, *e ...
- java(jdk8)死锁案例
package testSynchorized; public class SynchronizedDeadLockTest { static Object src1 = new Object(); ...
- vue中的:is
is string | Object (组件的选项对象) <div id="app"> <span>这是:is的案例</span> <co ...
- mysql CHECK约束 语法
mysql CHECK约束 语法 作用:CHECK 约束用于限制列中的值的范围. 直线电机 说明:如果对单个列定义 CHECK 约束,那么该列只允许特定的值.如果对一个表定义 CHECK 约束,那么此 ...
- ASP:CheckBox获取前台的checked的属性
后台代码: for (int i = 0; i < this.GvCourses.Rows.Count; i++) { CheckBox chb = this.GvCourses.Rows[i] ...
- 3D Computer Grapihcs Using OpenGL - 11 Model View Projection Matrices
本节我们将绘制一个3维物体,立方体. 如果要渲染3D物体,我们需要了解MVP(Model View Projection),它表示三个转换矩阵.实际上这个名字不够明确,更加确切的释义如下: Model ...
- [CSP-S模拟测试]:打扫卫生(暴力)
题目描述 有$N$头奶牛,每头那牛都有一个标号$P_i1\leqslant Pi\leqslant M\leqslant N\leqslant 40,000$.现在$Farmer\ John$要把这 ...
- SpringBoot 集成 Spring Session
SpringBoot 集成 Spring Session 应该讲解清楚,为什么要使用 Redis 进行 Session 的管理. Session 复制又是什么概念. Spring Session 在汪 ...
- 麦子lavarel---10、一些第三方应用注意
麦子lavarel---10.一些第三方应用注意 一.总结 一句话总结: 其实把重要的几个功能弄一个就好了,邮箱验证,手机号验证,支付验证,都是调用第三方接口,也很简单 1.关于页面和服务端校验的看法 ...
- Oracle JET(二)Oracle JET使用
Oracle JET 开发分为 Web 应用程序开发和移动应用程序开发(WebApp). Oracle JET Web 应用程序开发入门: 使用方法三种: 使用 Oracle JET Yeoman 生 ...