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

地址 : 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文件中。

关注我




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

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

JDK11 | 第五篇 : 启动单个Java源代码文件的程序的更多相关文章

  1. 第五篇--VS2017如何生成Dll文件

    参考资料: https://blog.csdn.net/qq_34097715/article/details/79540933 https://www.cnblogs.com/RascallySna ...

  2. 批量将Java源代码文件的编码从GBK转为UTF-8

    主要参考: http://blog.csdn.net/liu_qiqi/article/details/38706497 使用common io批量将java编码从GBK转UTF-8 http://w ...

  3. Eclipse:批量将Java源代码文件的编码从GBK转为UTF-8

    很简单的几行代码,就可以批量将GBK格式的java文件转为UTF-8格式. 基本上所有文本文件的编码转换都可以采用这种方式. import java.io.File; import java.io.I ...

  4. 如何将Java源代码文件的编码从GBK转为UTF-8?

    有时候看到有意思的demo,在头痛导入项目的编码和workspace的编码不一样的时候 我试着将 笔记本打开一个类一个类的复制, demo的类比较少的时候 可以忍受,demo的类多的时候 除了靠之外 ...

  5. Python之路【第五篇】:Python基础之文件处理

    阅读目录 一.文件操作 1.介绍 计算机系统分为:计算机硬件,操作系统,应用程序三部分. 我们用python或其他语言编写的应用程序若想要把数据永久保存下来,必须要保存于硬盘中,这就涉及到应用程序要操 ...

  6. spring-core-5.0.6.RELEASE-sources.jar中java源代码不全

    笔者最近在调试一段代码,进入spring-core以后,IDEA帮我反编译出源码,其中MethodProxy.java如下 // // Source code recreated from a .cl ...

  7. JD-GUI反编译jar包为Java源代码

    程序员难免要借鉴其他java工程的代码.可有时只能拿到.calss文件,jar包或者war包,这个时候要求程序员能熟练的将这些类型文件反编译为Java代码并形成可编译运行的项目.本文介绍的反编译工具是 ...

  8. 第五篇 :微信公众平台开发实战Java版之如何获取公众号的access_token以及缓存access_token

    一.access_token简介 为了使第三方开发者能够为用户提供更多更有价值的个性化服务,微信公众平台 开放了许多接口,包括自定义菜单接口.客服接口.获取用户信息接口.用户分组接口.群发接口等, 开 ...

  9. 一篇很好的学习查看Java源代码的文章

    目录: 一. ArrayList概述 二. ArrayList的实现 1) 私有属性 2) 构造方法 3) 元素存储 4) 元素读取 5) 元素删除                 6) 调整数组容量 ...

随机推荐

  1. u-boot-2016.09 make编译过程分析(一)

    https://blog.csdn.net/guyongqiangx/article/details/52565493 综述 u-boot自v2014.10版本开始引入KBuild系统,Makefil ...

  2. 主流Linux发行版及联系

    一.主流Linux主流发行版 RedHat:Red Hat Linux是由Red Hat公司发行的一个Linux发行包.其1.0版本于1994年11月3日发行,虽然其历史不及Slackware般悠久, ...

  3. pyqt5-QAbstractScrollArea滚动条

    继承  QObject-->QWidget-->QFrame-->QAbstractScrollArea 是抽象类 import sys from PyQt5.QtWidgets i ...

  4. 利用雅虎ycsb对cassandra做性能测试

    准备: 环境: 两台虚拟机:ip:192.168.138.128/129;配置:2核4G: 版本:apache-cassandra-3.10    ycsb-cassandra-binding-0.1 ...

  5. LeetCode--139--单词拆分(python)

    给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词. 说明: 拆分时可以重复使用字典中的单词.你可以假设字典中没有重复的 ...

  6. 触发器insert

    USE [stalentzx]GO/****** Object: Trigger [dbo].[GZ_HISTORY_INSERT] Script Date: 2019/12/24 13:11:40 ...

  7. logback系列二:logback在项目中的应用

    1.输出http日志 2.输出dubbo日志 3.输出interfacer日志 4.输出到access,remote,app等目录中

  8. 用 IDEA工具导入SVN项目。 步骤一:选择VCS

    Intellij IDEA是目前主流的IDE开发工具,工程项目导入也是必不可少的操作,本文讲述如何用 IDEA工具导入SVN项目. 步骤一:选择VCS 步骤二:打开SVN Repositories 在 ...

  9. 【CF1251E】Voting(贪心)

    题意:有n个人,需要搞到全部n个人的票,搞到第i个人的票有两种方式:之前已经搞到mi个人的票,或者直接花费pi 问最小的搞到所有票的总代价 n<=2e5,1<=p[i]<=1e9,0 ...

  10. [ethereum源码分析](3) ethereum初始化指令

    前言 在上一章介绍了关于区块链的一些基础知识,这一章会分析指令 geth --datadir dev/data/02 init private-geth/genesis.json 的源码,若你的eth ...