Java 21颠覆传统:未命名类与实例Main方法的编码变革

简介: Java 21颠覆传统:未命名类与实例Main方法的编码变革

Java 21 引入了两个语言核心功能:

  • 未命名的 Java 类
  • 新的启动协议:该协议允许更简单地运行 Java 类,并且无需太多样板

下面一起来看个例子。通常,我们初学 Java 的时候,都会写类似下面这样的 Hello World 程序

public class HelloWorld {
  
  public static void main(String[] args) {
    System.out.println("Hello, World!");
  }
}

对于程序的功能来说,这里有太多的混乱的代码、太多的概念、太多的构造。

  • Class 声明和强制的 public 访问修饰符是必须的。当用在外部组件定义良好的接口封装代码单元时,它们很有用。但在这个小例子中,它们毫无意义。
  • String[] 参数主要用于将代码与外部组件(在本例中为操作系统的 shell,接收命令传入的参数)连接。它在这里很神秘且无用,尤其是它从未被使用过。
  • static 修饰符是 Java 类和对象模型的一部分。对于新手来说,这不仅是神秘的,而且是有害的:要添加更多可以调用和使用的方法或字段,必须要么将它们全部声明(传播一种既不常见也不是好习惯的用法),或者就要面对是否有 static 修饰的区别问题,并学习如何实例化对象。

使用 Java 21 的 JEP 445 特性,该例子将简化为:

class HelloWorld {
  
  void main() {
     System.out.println("Hello, World!");
  }
}

如上例子,Java 21 增强了启动 Java 程序的协议,以允许实例使用 main 方法,且该方法不需要 static、不需要 public、也不需要任何参数。

其次,Java 21 还引入未命名的类来使声明隐式,像下面这样就可以了:

void main() {
   System.out.println("Hello, World!");
}


相关文章
|
2月前
|
Java
Java语言实现字母大小写转换的方法
Java提供了多种灵活的方法来处理字符串中的字母大小写转换。根据具体需求,可以选择适合的方法来实现。在大多数情况下,使用 String类或 Character类的方法已经足够。但是,在需要更复杂的逻辑或处理非常规字符集时,可以通过字符流或手动遍历字符串来实现更精细的控制。
287 18
|
2月前
|
存储 Java 索引
用Java语言实现一个自定义的ArrayList类
自定义MyArrayList类模拟Java ArrayList核心功能,支持泛型、动态扩容(1.5倍)、增删改查及越界检查,底层用Object数组实现,适合学习动态数组原理。
130 4
|
2月前
|
IDE JavaScript Java
在Java 11中,如何处理被弃用的类或接口?
在Java 11中,如何处理被弃用的类或接口?
216 5
|
2月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
202 1
|
2月前
|
Java Go 开发工具
【Java】(8)正则表达式的使用与常用类分享
正则表达式定义了字符串的模式。正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。
260 1
|
2月前
|
存储 Java 程序员
【Java】(6)全方面带你了解Java里的日期与时间内容,介绍 Calendar、GregorianCalendar、Date类
java.util 包提供了 Date 类来封装当前的日期和时间。Date 类提供两个构造函数来实例化 Date 对象。第一个构造函数使用当前日期和时间来初始化对象。Date( )第二个构造函数接收一个参数,该参数是从1970年1月1日起的毫秒数。
209 1
|
Java
JAVA方法的定义
JAVA方法的定义
237 0
|
9月前
|
存储 JSON Java
《从头开始学java,一天一个知识点》之:方法定义与参数传递机制
**你是否也经历过这些崩溃瞬间?** - 看了三天教程,连`i++`和`++i`的区别都说不清 - 面试时被追问"`a==b`和`equals()`的区别",大脑突然空白 - 写出的代码总是莫名报NPE,却不知道问题出在哪个运算符 🚀 这个系列就是为你打造的Java「速效救心丸」!我们承诺:每天1分钟,地铁通勤、午休间隙即可完成学习;直击痛点,只讲高频考点和实际开发中的「坑位」;拒绝臃肿,没有冗长概念堆砌,每篇都有可运行的代码标本。上篇:《输入与输出:Scanner与System类》 | 下篇剧透:《方法重载与可变参数》。
216 25
|
安全 Java 编译器
杭州 【Java基础知识 11】java泛型方法的定义和使用(学习+改进+自己理解,想法) (借鉴-侵-删)
杭州 【Java基础知识 11】java泛型方法的定义和使用(学习+改进+自己理解,想法) (借鉴-侵-删)
183 1
|
存储 Java
Java数组与带参数方法:定义、调用及实践
Java数组与带参数方法:定义、调用及实践
233 1