JAVA 新提案:努力简化Hello World,让初学者更好地接受 Java !
出品 | OSC开源社区(ID:oschina2013)
OpenJDK 的 JEP 445 提案正在努力简化 Java 的入门难度。这个提案主要是引入 “灵活的 Main 方法和匿名 Main 类” ,希望 Java 的学习过程能更平滑,让学生和初学者能更好地接受 Java 。
提案的作者 Ron Pressler 解释:现在的 Java 语言非常适合开发和维护大型复杂应用程序,但学校在教编程时往往会从变量、函数和子程序等基本的小型编程概念开始,在这个阶段,往往不需要类、包和模块的大型编程概念。但现在的 Java 对初学者不太友好,比如经典的 Hello, World! 入门程序 :
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 方法。
如此一来便允许省略 main
方法的 String[]
参数,并允许 main
方法既不是 public
也不是 static
。可以稍微简化 Hello, World! :
void main()
此外,还要引入匿名 Main 类来隐式声明 class
:
void main()
到这里 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 程序相同。
相关链接:https://openjdk.org/jeps/445
------
我们创建了一个高质量的技术交流群,与优秀的人在一起,自己也会优秀起来,赶紧点击加群,享受一起成长的快乐。另外,如果你最近想跳槽的话,年前我花了2周时间收集了一波大厂面经,节后准备跳槽的可以点击这里领取!
推荐阅读
··································
你好,我是程序猿DD,10年开发老司机、阿里云MVP、腾讯云TVP、出过书创过业、国企4年互联网6年。从普通开发到架构师、再到合伙人。一路过来,给我最深的感受就是一定要不断学习并关注前沿。只要你能坚持下来,多思考、少抱怨、勤动手,就很容易实现弯道超车!所以,不要问我现在干什么是否来得及。如果你看好一个事情,一定是坚持了才能看到希望,而不是看到希望才去坚持。相信我,只要坚持下来,你一定比现在更好!如果你还没什么方向,可以先关注我,这里会经常分享一些前沿资讯,帮你积累弯道超车的资本。
相关文章
- java 针对jvm的面试题_24个Jvm面试题总结及答案
- java 四舍五入运算_JAVA正确的四舍五入方法「建议收藏」
- 二叉树层序遍历 java
- java权限拦截器
- java简单的除法运算_Java除法运算的陷阱[通俗易懂]
- java 登录 qq_Java实现QQ登录
- java和基岩版区别_我的世界基岩版与Java版有什么区别?「建议收藏」
- java ee简介_Java EE 简介
- java parrallel for,Java 8 parallel forEach进度指示
- java messagedigest_Java 自带的加密类MessageDigest类(加密MD5和SHA)[通俗易懂]
- MySQL字段类型如何转为java_Java JDBC中,MySQL字段类型到JAVA类型的转换
- java oracle数据备份_Java实现Oracle数据库备份
- java生成license_使用truelicense实现用于JAVA工程license机制(包括license生成和验证)…
- vscode配置java环境变量_配置Java
- Java反射(完)类加载和反射获取信息
- 《2022 元宇宙行业人才发展报告》出炉:C 语言、Java 等底层技术是硬通货,相关岗位平均月薪 1.8 万元
- 【Java 虚拟机原理】Java 引用类型 ( 强引用 | 软引用 | 弱引用 | 虚引用 | 静态变量 )
- Java使用JDBC连接MYSQL数据库增删改查示例详解编程语言
- Java多线程编程总结详解编程语言
- Java新集合示意图详解编程语言
- Java是一门什么样的编程语言?
- Java里的Redis事务处理(redis事务java)
- 时间解决Redis与Java的过期时间冲突问题(redisjava过期)
- Java 关闭 Redis 连接的指南(java关闭redis)
- 策略Redis与Java联合实现有效的过期策略(redisjava过期)
- 缓存Redis Java缓存设置自动过期(redisjava过期)
- 使用JAVA实现高并发无锁数据库操作步骤分享
- 深入理解Java中的字符串类型