jdk11|第五篇:启动单个java源代码文件的程序(代码片段)

huanchupkblog huanchupkblog     2022-12-14     536

关键词:

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

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

关注我

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

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

第五篇uber启动视频播放

importUIKitimportAVFoundationclassGuidePage:FxBasePage{@IBOutletvarbackImageView:UIImageView?varplayer:AVPlayer!varplayerItem:AVPlayerItem!varlocation:FxLocation!overrideinit(nibNamenibNameOrNil:Strin 查看详情

混合编程jni第五篇之c++访问java代码

 今天继续JNI的学习,因为是混合编程,所以在写的过程中需要进行交互Java可以调用C++,C++也可以调用Java,虽然作为Java程序很少写C++,但是既然是做JNI开发,就不得不了解下如果在C++中访问Java的属性和方法,开始吧访问属... 查看详情

混合编程jni第五篇之c++访问java代码(代码片段)

 系列目录:【混合编程Jni】系列目录_香菜聊游戏的博客-CSDN博客今天继续JNI的学习,因为是混合编程,所以在写的过程中需要进行交互Java可以调用C++,C++也可以调用Java,虽然作为Java程序很少写C++,但是既然是做JNI开发,就... 查看详情

htmldom第五篇

通过HTMLDOM,JavaScript能够访问HTML文档中的每个元素。HTMLDOM允许您在事件发生时执行代码。当HTML元素"有事情发生"时,浏览器就会生成事件:在元素上点击加载页面改变输入字段添加、删除和替换HTML元素HTMLDOM允许JavaScript对HTML事... 查看详情

spring第五篇

在Spring第四篇中我们主要介绍了setget的注入方式在Spring第五篇中我们主要介绍使用注解配置Spring主要分为两个步骤1导包的同时引入新得约束导包如下 1.1重写注解代理配置文件代码如下  <?xmlversion="1.0"encoding="UTF-8"?>... 查看详情

第五篇深入理解httpsecurity的设计(代码片段)

深入理解HttpSecurity的设计一、HttpSecurity的应用  在前章节的介绍中我们讲解了基于配置文件的使用方式,也就是如下的使用。  也就是在配置文件中通过security:http等标签来定义了认证需要的相关信息,但是在SpringBoot... 查看详情

linux-0.11分析:init文件main.c的第二个初始化函数trap_init()第五篇随笔

2、第二个初始化函数,trap_init()参考[github这个博主的厉害][https://github.com/sunym1993/flash-linux0.11-talk]kernel文件夹->traps.cvoidtrap_init(void)inti;set 查看详情

rabbitmq第五篇:spring集成rabbitmq

  前面几篇讲解了如何使用rabbitMq,这一篇主要讲解spring集成rabbitmq。  首先引入配置文件org.springframework.amqp,如下<dependency><groupId>org.springframework.amqp</groupId><artifactId>spring 查看详情

接口测试(java+testng+ant+jenkins)第五篇java二

1、数据代码分离,方便维护。  一般做法是将数据保存在excel,通过程序读取。2、读取excel数据。  在D盘新建excel,A列放url,B列放参数。      新建classredExcelpackagecom.lx;importjava.io.File;importjava.io.IOException;importjxl.*;impo... 查看详情

directx11第五篇hello,shaders!

本系列文章主要翻译和参考自《Real-Time3DRenderingwithDirectXandHLSL》一书(感谢原书作者),同时会加上一点个人理解和拓展,文章中如有错误,欢迎指正。这里是书中的代码和资源。从这篇文章开始,我们终... 查看详情

第五篇camunda系列-任务分配(代码片段)

任务分配1.固定分配  在指派用户任务的审批人时。我们是直接指派的固定账号。但是为了保证流程设计审批的灵活性。我们需要各种不同的分配方式,所以这节我们就详细的来介绍先在Camunda中我们可以使用的相关的分配方式... 查看详情

第五篇css补充二

h1{background-color:palegreen}一、内容概要1、图标2、目录规划3、a标签中的img标签在浏览器中的适应性4、后台管理系统设置5、边缘提示框6、登录页面图标7、静态对话框8、加减框补充知识:line-height是行高,也可以定义行间距用法:... 查看详情

java笔记第五篇文本编辑器初见面

#日常唠叨#从现在开始,又要开始讲理论了,小星星努力今天写完文本编辑器之后再用2天时间写完数据类型,然后上代码,另外关于HelloWorld代码的讲解小星星会在写完运算符之后写编译厉害归厉害,但对我们打代码的流畅度、... 查看详情

第五篇:模块

 定义模块              一、模块基本概念1、模块是从逻辑上组织python代码的形式2、当代码量变得相当大的时候,最好把代码分成一些有3、组织的代码段,前提是保证它们的... 查看详情

第五篇camunda系列-任务分配(代码片段)

任务分配1.固定分配  在指派用户任务的审批人时。我们是直接指派的固定账号。但是为了保证流程设计审批的灵活性。我们需要各种不同的分配方式,所以这节我们就详细的来介绍先在Camunda中我们可以使用的相关的分配... 查看详情

第五篇camunda系列-任务分配(代码片段)

任务分配1.固定分配  在指派用户任务的审批人时。我们是直接指派的固定账号。但是为了保证流程设计审批的灵活性。我们需要各种不同的分配方式,所以这节我们就详细的来介绍先在Camunda中我们可以使用的相关的分配... 查看详情

第五篇:文件合并与文件归档

文件合并与文件归档1.>表示把>左边命令的输出内容覆盖到右边 >>表示把>>左边命令的输出内容追加到右边 例:文件合并cata.txtb.txt>c.txt(把a.txt和b.txt合并成c.txt)2.统计文件行数:wc-l文件名3.管道|表示把左... 查看详情

activemq学习第五篇:activemq伪集群学习(代码片段)

启动多实例#1、将conf文件夹复制一份cp-rconf/conf-1/#主要是修改conf-1目录activemq.xml#2、修改Broker名称<brokerxmlns="http://activemq.apache.org/schema/core"brokerName="localhost-1"dataDirectory="$activemq.data">#3、数据存储如果使用... 查看详情