Java 21 新特性—未命名类和实例的main方法

作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO

联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬

学习必须往深处挖,挖的越深,基础越扎实!

阶段1、深入多线程

阶段2、深入多线程设计模式

阶段3、深入juc源码解析


阶段4、深入jdk其余源码解析


阶段5、深入jvm源码解析

码哥源码部分

码哥讲源码-原理源码篇【2024年最新大厂关于线程池使用的场景题】

码哥讲源码【炸雷啦!炸雷啦!黄光头他终于跑路啦!】

码哥讲源码-【jvm课程前置知识及c/c++调试环境搭建】

​​​​​​码哥讲源码-原理源码篇【揭秘join方法的唤醒本质上决定于jvm的底层析构函数】

码哥源码-原理源码篇【Doug Lea为什么要将成员变量赋值给局部变量后再操作?】

码哥讲源码【你水不是你的错,但是你胡说八道就是你不对了!】

码哥讲源码【谁再说Spring不支持多线程事务,你给我抽他!】

终结B站没人能讲清楚红黑树的历史,不服等你来踢馆!

打脸系列【020-3小时讲解MESI协议和volatile之间的关系,那些将x86下的验证结果当作最终结果的水货们请闭嘴】

引言

Java 初学者你的第一个 Class 类一定是下面这个:

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

这个方法对老手来说这个类非常简单,但是对于新手而言,这个类就比较复杂了,因为涉及到了 Java 里面好几个概念,大明哥给你拆解下:

  1. public class HelloWorld
    1. public:这是一个访问修饰符,表示这个类对所有类都是可见的。
    2. class:这是一个关键字,用来定义一个类。
    3. HelloWorld:这是类的名称。
  2. public static void main(String[] args)
    1. public:访问修饰符,表示这个方法对所有类都是可见的。
    2. static:Java 的一个关键字,表示这个方法可以在没有创建类的对象的情况下被调用。
    3. void:方法的返回类型,void表示这个方法不返回任何值。
    4. main:方法的名称,main() 是Java程序的入口点。
    5. String[] argsmain() 的参数,args是一个字符串数组,可以从命令行接收参数。这个参数非常神秘而且无用,因为它几乎没有用到过。
  3. System.out.println("Hello, World!")
    1. System:一个预定义的Java类,包含用于标准输入、输出等的方法和变量。
    2. outSystem类的一个静态成员字段,表示标准输出流。
    3. printlnPrintStream类的一个方法,用于输出信息并换行。
    4. "Hello, World!":这是被输出的字符串。

如果你学习 Java 的第一课,你老师把这个拆解来解释给你看,你会不会晕?而且还告诉你这是 Java 中最简单的没有之一,你会不会退却?我学习的时候,我老师就一句话,记住就行,而且那个时候我们还是用记事本敲,经常敲不对。这无形中就提高的初学者的入门门槛。

为了方便入门和教学,Java 21 引入特性:未命名类和实例的Main方法。它主要包含两部分内容:

  • 未命名的Java类:指的是没有明确命名的类,它们可以用来创建对象并调用方法。
  • 新的启动协议:允许更简单地运行Java类,并且无需太多样板。

实例 main 方法

Java 21增强了启动Java程序的协议,允许实例直接使用main方法。它做了下精简:

  1. 实例main方法,就意味着可以是 non-static 的。
  2. main() 的访问修饰符可以不必是 public 的,只需要是 non-private(也即publicprotected 和 package-protected)的即可。
  3. main() 中的 String[] args 将是可选传入的。

所以一个 main() 可以精简成这样:

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

未命名类

Java 21还引入未命名的类来实现隐式声明,也就是我们可以写类名,也可以不写类名,故而上面的代码可以进一步精简:

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

当一个类中不包含任何类声明,而仅有方法声明和成员变量声明时,该类便被称为“未命名类”。由于无类申明,所以是无法使用静态方法的,但是可以使用 this 关键字或非静态方法的方法引用。

同时,未命名类是可以拥有成员变量和成员方法的,如下:

String skjava = "死磕 Java 新特性";
 
String getSk() { return skjava; }
 
void main() {
    System.out.println(getSk());
}

这两个特性还处于预览阶段,而且大明哥认为对于我们在实际开发过程中意义并不大。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值