面试官问我Java9~14的有哪些重要的新特性,我哭了~~~( 五 )
动态应用程序类-数据共享
- Java 13 中对 Java 10 中引入的 应用程序类数据共享进行了进一步的简化、改进和扩展 , 即:允许在 Java 应用程序执行结束时动态进行类归档 , 具体能够被归档的类包括:所有已被加载 , 但不属于默认基层 CDS 的应用程序类和引用类库中的类
- 简化数据类的定义方式 , 使用 record 代替 class 定义的类 , 只需要声明属性 , 就可以在获得属性的访问方法 , 以及 toString , hashCode,equals 方法
- 类似于使用 Class 定义类 , 同时使用了 lomobok 插件 , 并打上了@Getter,@ToString,@EqualsAndHashCode注解
- 作为预览特性引入 /** * 这个类具有两个特征 * 1. 所有成员属性都是final * 2. 全部方法由构造方法 , 和两个成员属性访问器组成(共三个) * 那么这种类就很适合使用record来声明 */ final class Rectangle implements Shape { final double length; final double width; public Rectangle(double length, double width) { this.length = length; this.width = width; } double length() { return length; } double width() { return width; } } /** * 1. 使用record声明的类会自动拥有上面类中的三个方法 * 2. 在这基础上还附赠了equals() , hashCode()方法以及toString()方法 * 3. toString方法中包括所有成员属性的字符串表示形式及其名称 */ record Rectangle(float length, float width) { }
- 通过 JVM 参数中添加-XX:+ShowCodeDetailsInExceptionMessages , 可以在空指针异常中获取更为详细的调用信息 , 更快的定位和解决问题 a.b.c.i = 99; // 假设这段代码会发生空指针 Exception in thread "main" java.lang.NullPointerException: Cannot read field 'c' because 'a.b' is null. at Prog.main(Prog.java:5) // 增加参数后提示的异常中很明确的告知了哪里为空导致
- JDK12 引入的 switch(预览特性)在 JDK14 变为正式版本 , 不需要增加参数来启用 , 直接在 JDK14 中就能使用
- 主要是用->来替代以前的:+break;另外就是提供了 yield 来在 block 中返回值
switch (day) {case MONDAY:case FRIDAY:case SUNDAY:System.out.println(6);break;case TUESDAY:System.out.println(7);break;case THURSDAY:case SATURDAY:System.out.println(8);break;case WEDNESDAY:System.out.println(9);break;}
Java 14 enhancementsswitch (day) {case MONDAY, FRIDAY, SUNDAY -> System.out.println(6);case TUESDAY-> System.out.println(7);case THURSDAY, SATURDAY-> System.out.println(8);case WEDNESDAY-> System.out.println(9);}
instanceof 增强- instanceof 主要在类型强转前探测对象的具体类型 , 然后执行具体的强转
- 新版的 instanceof 可以在判断的是否属于具体的类型同时完成转换
Object obj = "我是字符串";if(obj instanceof String str){System.out.println(str);}
其他特性- 从 Java11 引入的 ZGC 作为继 G1 过后的下一代 GC 算法 , 从支持 Linux 平台到 Java14 开始支持 MacOS 和 Window(个人感觉是终于可以在日常开发工具中先体验下 ZGC 的效果了 , 虽然其实 G1 也够用)
- 移除了 CMS 垃圾收集器(功成而退)
- 新增了 jpackage 工具 , 标配将应用打成 jar 包外 , 还支持不同平台的特性包 , 比如 linux 下的deb和rpm , window 平台下的msi和exe
- 先贴一段 oracle 官网原文:This is a preview feature, which is a feature whose design, specification, and implementation are complete, but is not permanent, which means that the feature may exist in a different form or not at all in future JDK releases. To compile and run code that contains preview features, you must specify additional command-line options.
- Java学习:Java学习到什么程度可以进行面试
- 程序员面试金典17.05_go_字母与数字
- 安卓春招面经:二本渣院面试网易被拒,最终获腾讯阿里offer
- 「6」进大厂必须掌握的面试题-Hibernate
- 震惊!京东T4大佬面试整整三个月,才写了两份java面试笔记
- 安卓面试必备的JVM虚拟机制详解,看完之后简历上多一个技能
- 面试官问:MySQL 的自增 ID 用完了,怎么办?
- 「3」Java面试-Servlet
- 大数据hbase面试宝典(三)
- 北大英华大数据面试题