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) 调整数组容量 ...
随机推荐
- nacos 动态刷新@ConfigurationProperties
使用@ConfigurationProperties 可以替换@value @ConfigurationProperties @Value 注解功能 可以批量注入配置文件中的属性 只能一个个指定注 ...
- 如何提高SMTP邮件的安全性?从而不被黑客窃听
简单邮件传输协议(SMTP)用于在邮件服务器之间进行邮件传输,并且传统上是不安全的,因此容易被黑客窃听.命名实体的基于DNS的认证(国家统计局)用于SMTP提供了邮件传输更安全的方法,并逐渐变得越来越 ...
- window.open()的实际应用
Window open() 方法 定义和用法 open() 方法用于打开一个新的浏览器窗口或查找一个已命名的窗口. 语法 window.open(URL,name,specs,replace) 参数 ...
- 【UOJ#349】[WC2018] 即时战略
题目链接 题意 一开始已知一号点. 每次可以选定一个已知点和一个未知点,然后交互库会返回从已知点出发到达未知点路径上的第二个点. 要求在有限步之内知道每一个点. 次数要求: 链的情况要求 \(O(n) ...
- Vue中 axios+QS 插件往后台传参
之前用Vue+element写了一个后台管理系统,在登录时使用axios请求数据传参时无法正常的获取数据.发现原因是传递参数要将参数序列化.这里使用了qs插件: 简单来说,qs 是一个增加了一些安全性 ...
- 接口返回[object,Object]解决方法
1.我们请求接口时有时会返回[object,Object],[object,Object],[object,Object].... 这个我们使用JSON.stringfity(data),就可以解决.
- mysql RIGHT JOIN关键字 语法
mysql RIGHT JOIN关键字 语法 作用:RIGHT JOIN 关键字会右表 (table_name2) 那里返回所有的行,即使在左表 (table_name1) 中没有匹配的行.惠州大理石 ...
- Linux日志管理系统rsyslog
一.日志的概念 什么是日志?日志就是历史事件.历史事件包括时间.地点.人物.时间.这个是生活中所说的日志很好理解.在Linux中也有类似的服务,它主要作用就是记录Linux系统的历史事件,包括什么时间 ...
- Kaggle 房价预测问题参考资料
作者的 Kaggle 主页:https://www.kaggle.com/pavansanagapati Tutorial - Housing Prices Model Prediction http ...
- hashcode、equals、HashMap间的关系
1.从Object说起package com.hallo.collection; public class ObjectDemo { public static void main(String[] ...