JDK11 | 第五篇 : 启动单个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文件中。

关注我

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

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

原文地址:https://www.cnblogs.com/huanchupkblog/p/10947883.html

时间: 2024-10-12 13:12:36

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

eclipse里添加不属于工程的java源代码文件/文件夹

有时候就是为了查看某个软件的源代码,但这个代码不是开源的.可能出于部分开发的便利,软件开放了一些java源代码作为参考,但其他部分都封装好了,无法查看其完整工程.这样如果一个文件一个文件的看,没法编译,而且相关库函数,互相class之间的调用都无法跳转查找. 于是,首先想到的是自己新建一个工程,把这些文件代码一个一个复制进去.但是,如果是一个很大的工程,文件特别多,就特别麻烦了. 偶然,我发现直接把源代码的文件夹直接拖入自己新建工程的source folder里,就可以自动添加进去了,这样就省去

myeclipse2017使用 三方jar包的class文件关联java源代码文件

礼悟:    好好学习多思考,尊师重道存感恩.叶见寻根三二一,江河湖海同一体.          虚怀若谷良心主,愿行无悔给最苦.读书锻炼强身心,诚劝且行且珍惜. os:windows7 x64            ide:MyEclipse 2017 第一步 在jar包已经导入的情况下,查看.class文件,会发现...源代码找不到 第二步 第三步 第四步 第五步,结果展示 演示完毕,有源代码可以看,那么一些方法的特性就可以更好地理解. myeclipse是一款十分优秀的IDE,值得努力学习

【转】BAT启动执行JAVA JAR文件中的MAIN方法的两种方式

A .导出runnable jar 1. Eclipse导出选择Runnable JAR,选择执行的Main入口函数,执行 java -jar Test.jar,Jar包内包含清单文件,记录了引用到的Jar包和所需要执行的main函数所在的类  2. 如上操作会生成一个Test.jar和包含所有引用的第三方库包的Test_lib文件夹,在Jar包同级目录放入写好命令的Bat文件,执行得到 @echo offtitle test echo start exejava -jar hello.jarp

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

有时候看到有意思的demo,在头痛导入项目的编码和workspace的编码不一样的时候 我试着将 笔记本打开一个类一个类的复制, demo的类比较少的时候 可以忍受,demo的类多的时候 除了靠之外 别无办法 今天再找仿ios样式demo的时候 实在受不了乱码,新浪一搜,出现给力的工具类 大致思路 挺简单的 无非是找到路径 重新转码.谢谢 作者,尊重原创. http://blog.sina.com.cn/s/blog_7e4ac8b501019ujd.html

【Java_项目篇<1>】--JAVA实现坦克大战游戏--赋予敌人行动和攻击(五)

前期相关文章 [Java_项目篇<1>]–JAVA实现坦克大战游戏–画出坦克(一) [Java_项目篇<1>]–JAVA实现坦克大战游戏–坦克移动+添加敌方坦克(二) [Java_项目篇<1>]–JAVA实现坦克大战游戏–坦克发射子弹(三) [Java_项目篇<1>]–JAVA实现坦克大战游戏–子弹连发+爆炸效果(四) 一.任务需求 赋予敌人行动和攻击. 二.思路 - 敌人行动 1.需要把EnemyTank做成线程类实现Runnable接口. run方法中,

Java进阶之欧拉工程 第十五篇【网格路径问题】

网格路径问题,中文翻译如下: 从 22的格子的左上角开始,只允许向右和向下移动,一共有六种路径可以抵达右下角 那么在2020的路径中一共有多少条这样的路径? 原题如下: Starting in the top left corner of a 22 grid, and only being able to move to the right and down, there are exactly 6 routes to the bottom right corner. How many such

Java进阶之欧拉工程 第十五篇【2的1000次方各位之和为多少】

题目如下: 215 = 32768 并且其各位之和为 is 3 + 2 + 7 + 6 + 8 = 26. 21000 的各位数之和是多少? 原题如下: 215 = 32768 and the sum of its digits is 3 + 2 + 7 + 6 + 8 = 26. What is the sum of the digits of the number 21000? 解题思路:这道题和之前的大数求和的思想有点类似,就是用数组存储大数的每一位数,然后相加,上次写的大数相加的函数稍作

【Python五篇慢慢弹(5)】‘类’过依然继续前行,直至ending再出发

‘类’过依然继续前行,直至ending再出发 作者:白宁超 2016年10月10日22:36:57 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给出的pythondoc入门资料包含了基本要点.本文是对文档常用核心要点进行梳理,简单冗余知识不再介绍,作者假使你用c/java/c#/c++任一种语言基础.本系列文章属于入门内容,老鸟可以略看也可以略过,新鸟可以从篇一<快速上手学python>先接触下python怎样安装与运行,以及pychar

Java总结篇系列:Java多线程(三)

一.一个典型的Java线程安全例子 1 public class ThreadTest { 2 3 public static void main(String[] args) { 4 Account account = new Account("123456", 1000); 5 DrawMoneyRunnable drawMoneyRunnable = new DrawMoneyRunnable(account, 700); 6 Thread myThread1 = new Thr