简化 Hello World:Java 新写法要来了

news2024/11/25 2:47:26


OpenJDK 的 JEP 445 提案正在努力简化 Java 的入门难度。

这个提案主要是引入 “灵活的 Main 方法和匿名 Main 类” ,希望 Java 的学习过程能更平滑,让学生和初学者能更好地接受 Java 。

提案的作者 Ron Pressler 解释:现在的 Java 语言非常适合开发和维护大型复杂应用程序,但学校在教编程时往往会从变量、函数和子程序等基本的小型编程概念开始,在这个阶段,往往不需要类、包和模块的大型编程概念。

但现在的 Java 对初学者不太友好,比如经典的 Hello, World! 入门程序 :

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

Ron 认为,作为新手入门的第一个程序,这段代码太复杂了。

比如 class 声明和强制性的 public 访问修饰符是大型编程结构,它们在封装具有定义良好的外部组件接口的代码单元时很有用,但在这个入门小示例中毫无意义。

String [] args 参数用于将代码与外部组件连接起来,但在这段代码里面不会被使用。

static 修饰符是 Java 类和对象模型的一部分,但在新手村出现也为时尚早。

作为优化,该提案首先增强了启动 Java 程序的协议灵活性:

  • 允许已启动类的 main 方法具有 public 、 protected 或默认(即包)访问权限。

  • 如果启动的类不包含带 String [] 参数的 static main 方法,但包含不带参数的 static main 方法,则调用该方法。

  • 如果启动的类没有 static main 方法,但有一个非 private 零参数构造函数(即 public 、 protected 或包访问)和一个非 private 实例 main 方法,然后构造该类的一个实例。如果该类有一个带 String [] 参数的实例 main 方法,则调用该方法;否则,不带参数调用实例 main 方法。

基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/ruoyi-vue-pro

  • 视频教程:https://doc.iocoder.cn/video/

如此一来便允许省略 main 方法的 String[] 参数,并允许 main 方法既不是 public 也不是 static 。

可以稍微简化 Hello, World! :

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

此外,还要引入匿名 Main 类 来隐式声明 class :

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

到这里 Java 的 Hello, World!  入门程序已经到了简化,但在 Ron 眼里,该 JEP 提供的优化只是使 Java 更易于学习的第一步,像 System.out.println 这种长方法 / 函数也是需要简化的地方,不过这些问题需要在未来的 JEP 提案中逐步解决。

该优化属于预览语言功能,默认禁用。

要在 JDK 21 中尝试该示例,必须启用预览功能:用 javac --release 21 --enable-preview Main.java 编译程序,用 java --enable-preview Main 运行;或者使用源代码启动器时,使用 java --source 21 --enable-preview Main.java 运行程序。

有关灵活的启动协议和匿名 main 类的更多信息,可以在提案正文中详阅(https://openjdk.org/jeps/445)。

提案目标

  • 为 Java 提供平滑的入口,方便教育工作者可以循序渐进地介绍编程的概念。

  • 帮助学生以简洁的方式编写基本入门程序,并随着其 Java 技能增长,优雅地扩展代码。

  • 减少编写简单程序(例如脚本和命令行实用程序)的仪式。

  • 不要单独介绍 Java 的初学者方言。

  • 不引入单独的初学者工具链;编译和运行学生的程序,使用的工具应该和生产环境的 Java 程序相同。


                

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/627965.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

快速上手Flutter

目录 一、Flutter介绍 1.高效开发 2.优异的性能 3.较低的开发成本 4.社区活跃 二、Flutter使用 1.Dart 语言 2.什么是Dart语言 3.Flutter 组件库 4.Layout 布局 5.Flutter 工具 6.Flutter社区 三、Flutter使用技巧 四、总结 一、Flutter介绍 Flutter是谷歌的移动…

[CKA]考试之节点维护-指定 node 节点不可用

由于最新的CKA考试改版,不允许存储书签,本博客致力怎么一步步从官网把答案找到,如何修改把题做对,下面开始我们的 CKA之旅 题目为: Task 将k8s-node1节点设置为不可用,然后重新调度该节点上的所有Pod 注…

优维低代码实践:模板

优维低代码技术专栏,是一个全新的、技术为主的专栏,由优维技术委员会成员执笔,基于优维7年低代码技术研发及运维成果,主要介绍低代码相关的技术原理及架构逻辑,目的是给广大运维人提供一个技术交流与学习的平台。 优维…

如何提高测试用例的编写效率?

1、提高测试覆盖率 我们通过对测试用例的评审,进一步完善测试覆盖率。在评审过程中,不同的评审专家看待问题的角度不完全一致,因此我们需要充分考虑测试方法,扩充测试用例的全面性,确保基本功能和核心功能的覆盖率。 如…

操作系统课后题答案(费翔林)

仅为老师布置的课后题答案,仅供学习参考 习题2

数据的存储方式(Parquet、ORC)

文章目录 数据的存储方式按行存储按列存储 Parquest文件布局概念并行处理的单元 配置Row Group Size 行组的大小Data Page Size 数据页的大小 元数据数据页Hive下的Parquet实验Parquet简单工具的使用支持的组件 Apache ORC文件布局Stripe Hive下的Parquet实验ORC简单工具的使用…

NLP——part of speech (POS)中的隐马尔可夫模型 + Viterbi 算法

文章目录 POS隐马尔可夫模型计算简介转移概率矩阵(Transition matrix)观察矩阵(Observation / emission Matrix)预测 predictionVitervi 算法练习 POS 词性标注(Part-of-Speech Tagging,POS Tagging&#…

【AUTOSAR-Code调试】:Wdog

【AUTOSAR-Code调试】:Wdog DavinciCfg 生成文件添加进GreenHill编译添加.c文件添加.h文件路径 接上篇【Davinci开发】:Wdg配置 DavinciCfg 生成文件添加进GreenHill编译 添加.c文件 添加.h文件路径

模拟实现 Spring AOP

文章目录 前言Spring AOPSpring AOP 概述Spring IoC 技术难点Spring IoC 框架思考需求分析 Spring IoC 技术难点实现模拟实现 AOP 具体代码 前言 Spring 是一种 Java 开发框架,其主要功能有两个:IoC(DI)和AOP。《模拟实现Spring AOP》是本人的一个编程训…

基于SSM的校园二手交易平台

一、源码获取: 链接点击直达:下载链接 二、系统架构: 使用技术: SpringSpringMVCMybatis 三、系统需求分析: 在如今的大学校园中,伴随着学生的购买能力的提高和每年的升学和毕业,存在许多…

调用阿里云API实现证件照生成

目录 1. 作者介绍2. 算法介绍2.1 阿里云介绍2.2 证件照生成背景2.3 图像分割算法 3.调用阿里云API进行证件照生成实例3.1 准备工作3.2 实验代码3.3 实验结果与分析 参考(可供参考的链接和引用文献) 1. 作者介绍 王逸腾,男,西安工…

ASEMI代理英飞凌TLD5097EL:理解和使用LED驱动器的综合指南

编辑-Z TLD5097EL是一款创新的LED驱动器,在照明行业掀起了波澜。这项先进的技术提供了广泛的好处,包括提高能源效率、延长使用寿命和增强性能。在本综合指南中,我们将探讨TLD5097EL的功能和优点,并提供如何有效利用该LED驱动器优…

python -- 绘制colorbar时设置标签为居中显示

python – 绘制colorbar时设置标签为居中显示 在海洋气象领域的相关研究中,对于一些异常信号的二维填色图绘制时,通常在设置colorbar都是以0为中心对称分布的。而在绘制colorbar时,由于存在负号会使得默认colorbar标签不太好看(强…

window服务器环境将springboot jar包安装成一个window服务自启动

目录 1.下载WinSW工具 下载winswhttps://github.com/winsw/winsw/releases 2.新建一个Window Service信息的xml文件 3.将xml和exe重命名 4.安装卸载服务 5.修改配置文件 6.常用命令(注意winsw是exe名字 1.下载WinSW工具 下载winswhttps://github.com/winsw/winsw/rele…

图像降噪网络:KBNet 论文笔记

0 前言 Zhang Y, Li D, Shi X, et al. KBNet: Kernel Basis Network for Image Restoration[J]. arXiv preprint arXiv:2303.02881, 2023. https://arxiv.org/abs/2303.02881 论文主要提出了 Kernel Basis Attention Module 注意力模块,称为 KBA 模块。该模块可以轻…

[中阳期货】端午都有哪些习俗,为什么不能说快乐?

端午节(屈原故里端午习俗),流行于湖北省宜昌市、秭归县的传统民俗,国家级非物质文化遗产之一。 “五月五(农历),过端午。”端午节是中华民族的传统节日。《续齐谐记》、《荆楚岁时记》载&#x…

AI 人工智能介绍(一)

人工智能(AI)是一种利用计算机程序和算法来模拟人类智能的技术。通俗地说,就是让计算机能够像人一样思考、学习、推理和决策。 人工智能改变了我们的生活!它被广泛应用于语音识别、计算机视觉、自然语言处理、智能机器人等多种领…

ubuntu20.04虚拟机安装

下载对应版本镜像文件(iso) 下载链接:https://releases.ubuntu.com/jammy/ 虚拟机安装工具为VMware 这里我的版本为下图所示 使用vmware创建虚拟机 1,点击 “创建新的虚拟机” 2,进入向导,选择自定义 …

基于docker部署的Selenium Grid分布式自动化测试

01、什么是Selenium Grid Selenium Grid是Selenium套件的一部分,它专门用于并行运行多个测试用例在不同的浏览器、操作系统和机器上。 Selenium Grid有两个版本——老版本Grid 1和新版本Grid 2。我们只对新版本做介绍,因为Selenium团队已经逐渐遗弃老版…

非线性规划求解方法:序列线性规划(Sequential linear programming)

来源:Cornell University Computational Optimization Open Textbook:SLP​​​​​​​ 目录 1.介绍 2.理论和方法 2.1 问题形式 2.1.1 NLP问题形式 2.1.2 SLP问题形式 2.2 步长边界 Step Bounds 2.3 完整的SLP算法 3.案例 3.1 example1 3.2…