zoukankan      html  css  js  c++  java
  • 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文件中。

    关注我


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

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

  • 相关阅读:
    JavaScript (三) js的基本语法
    JavaScript (二) js的基本语法
    JavaScript (一) js的介绍及基本语法变量
    Spring事务管理
    python静态方法、类方法
    python多继承
    python面向对象
    python模块(4)
    python模块(3)
    python模块(2)
  • 原文地址:https://www.cnblogs.com/huanchupkblog/p/10947883.html
Copyright © 2011-2022 走看看