当前位置: 首页 > news >正文

Java14-16新特性

目录

一、Java14新特性

1、instanceof模式匹配

2、友好的空指针(NullPointerException)提示

3、record类型

二、Java15新特性

1、Sealed Classes

2、CharSequence新增方法

3、TreeMap新增方法

4、文本块

5、无需配置环境变量

三、Java16新特性

1、包装类构造方法的警告

2、新增日时段

3、InvocationHandler新增方法


一、Java14新特性

JDK12和JDK13中预览版的switch特性,在JDK14已经是正式的语法了。

1、instanceof模式匹配

instanceof模式匹配:该特性可以减少强制类型转换的操作,简化了代码。

public class InstanceOf {public static void main(String[] args) {Object obj=1;if (obj instanceof Integer){Integer i = (Integer) obj;System.out.println(i);}//新写法if(obj instanceof Integer i){System.out.println(i);}}
}

2、友好的空指针(NullPointerException)提示

JDK14添加了对于空指针异常友好的提示,便于开发者快速定位空指针的对象。

package com.lwz.java14;public class TestNull {public static void main(String[] args) {new Car().engine.machine.start();}
}class Car{public Engine engine;
}
class Engine{public  Machine machine;
}
class Machine{public void start(){System.out.println("start");}
}

运行结果:

Exception in thread "main" java.lang.NullPointerException: Cannot read field "machine" because "engine" is nullat com.lwz.java14.TestNull.main(TestNull.java:5)

3、record类型

record类型,通过该类型可以省去成员变量,构造方法,get、set、toString方法,hashcode方法,equals方法等代码编写

package com.lwz.java14;public record User(String name,Integer age) {public void study(){System.out.println("study");}
}

测试:

package com.lwz.java14;public class TestRecord {public static void main(String[] args) {User user = new User("小米", 18);System.out.println(user);//User[name=小米, age=18]System.out.println(user.name());//小米user.study();//study}
}

反编译

D:\xxxx....xxxx>javap -c User.class
Compiled from "User.java"
public final class com.lwz.java14.User extends java.lang.Record {public com.lwz.java14.User(java.lang.String, java.lang.Integer);Code:0: aload_01: invokespecial #1                  // Method java/lang/Record."<init>":()V4: aload_05: aload_16: putfield      #7                  // Field name:Ljava/lang/String;9: aload_010: aload_211: putfield      #13                 // Field age:Ljava/lang/Integer;14: returnpublic void study();Code:0: getstatic     #17                 // Field java/lang/System.out:Ljava/io/PrintStream;3: ldc           #23                 // String study5: invokevirtual #25                 // Method java/io/PrintStream.println:(Ljava/lang/String;)V8: returnpublic final java.lang.String toString();Code:0: aload_01: invokedynamic #31,  0             // InvokeDynamic #0:toString:(Lcom/lwz/java14/User;)Ljava/lang/String;6: areturnpublic final int hashCode();Code:0: aload_01: invokedynamic #35,  0             // InvokeDynamic #0:hashCode:(Lcom/lwz/java14/User;)I6: ireturnpublic final boolean equals(java.lang.Object);Code:0: aload_01: aload_12: invokedynamic #39,  0             // InvokeDynamic #0:equals:(Lcom/lwz/java14/User;Ljava/lang/Object;)Z7: ireturnpublic java.lang.String name();Code:0: aload_01: getfield      #7                  // Field name:Ljava/lang/String;4: areturnpublic java.lang.Integer age();Code:0: aload_01: getfield      #13                 // Field age:Ljava/lang/Integer;4: areturn
}

二、Java15新特性

1、Sealed Classes

密封类和接口,作用是限制一个类可以由哪些子类继承或者实现。

1、如果指定模块的话,sealed class和其子类必须在同一个模块下,如果没有指定模块,则需要在同一个包下。

2、sealed class指定的子类必须直接继承该sealed class。

3、sealed class的子类要用final修饰。

4、sealed class的子类如果不想用final修饰的话,可以将子类声明为sealed class。

package com.lwz.java15;//只希望Cat和Dog能够继承Animal类
public sealed class Animal permits Cat,Dog{public void eat(){}
}

package com.lwz.java15;//Cat不能有子类
public final class Cat extends Animal{@Overridepublic void eat() {System.out.println("吃鱼");}
}

package com.lwz.java15;//需要指定子类
public sealed class Dog extends Animal permits Hushy{@Overridepublic void eat() {System.out.println("吃肉");}
}

package com.lwz.java15;public final class Hushy extends Dog{
}

2、CharSequence新增方法

该接口新增了isEmpty(),作用是判断CharSequence是否为空

    /*** Returns {@code true} if this character sequence is empty.** @implSpec* The default implementation returns the result of calling {@code length() == 0}.** @return {@code true} if {@link #length()} is {@code 0}, otherwise* {@code false}** @since 15*/default boolean isEmpty() {return this.length() == 0;}

3、TreeMap新增方法

putIfAbsent
computeIfAbsent
computeIfPresent
compute
merge

4、文本块

文本块由预览版变更为正式版

5、无需配置环境变量

win系统中安装完成之后会自动将java.exe,javaw.exe,javac.exe,jshell.exe这几个命令添加到环境变量中。

三、Java16新特性

1、包装类构造方法的警告

使用包装类的构造方法在编译的时候会出现警告,不建议再使用包装类的构造方法,下面代码在javac编译之后会出现警告

public class Test {public static void main(String[] args) {Integer i=new Integer(6);System.out.println(i);synchronized (i){//警告,Integer 因有缓存池,不相关代码也可能互相影响}}
}
    @Deprecated(since="9", forRemoval = true)public Integer(int value) {this.value = value;}

2、新增日时段

打印上午下午晚上等时间

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;public class Data01 {public static void main(String[] args) {System.out.println(DateTimeFormatter.ofPattern("B").format(LocalDateTime.now()));}
}

3、InvocationHandler新增方法

    @CallerSensitivepublic static Object invokeDefault(Object proxy, Method method, Object... args)throws Throwable {Objects.requireNonNull(proxy);Objects.requireNonNull(method);return Proxy.invokeDefault(proxy, method, args, Reflection.getCallerClass());}

Java11-13新特性

一个程序员最重要的能力是:写出高质量的代码!!
有道无术,术尚可求也,有术无道,止于术。
无论你是年轻还是年长,所有程序员都需要记住:时刻努力学习新技术,否则就会被时代抛弃!

相关文章:

Java14-16新特性

目录 一、Java14新特性 1、instanceof模式匹配 2、友好的空指针(NullPointerException)提示 3、record类型 二、Java15新特性 1、Sealed Classes 2、CharSequence新增方法 3、TreeMap新增方法 4、文本块 5、无需配置环境变量 三、Java16新特性 1、包装类构造方法的…...

中兴再推爆款,双2.5G网口的巡天AX3000Pro+仅需299元

10月30日消息,中兴新款路由器中兴巡天AX3000Pro将于10月31日20:00正式开售,当前可在天猫、京东及红魔商城进行预约,首发价格299元。 据了解,中兴巡天AX3000Pro是中兴智慧家庭推出的巡天系列新品,也是当前市场上唯一一款300元价位内配备双2.5G网口的路由器。 中兴巡天AX3000Pro…...

【系统架构】架构风格专题

目录 1、定义 2、通用架构风格分类 3、架构风格比较 4、示例&#xff1a;管道-过滤 VS 数据仓库&#xff09;比较因素分析 1、定义 架构风格&#xff1a;描述某一特定应用领域中系统组织方式的惯用模式&#xff0c;反映了领域中众多系统所共有的结构和语义特性&#xff0c…...

【Qt】盒子布局、网格布局、表单布局和堆栈布局

盒子布局 QBoxLayout可以在水平方向或垂直方向上排列控件&#xff0c;分别派生了QHBoxLayout、QVBoxLayout子类。 QHBoxLayout&#xff1a;水平布局&#xff0c;在水平方向上排列控件&#xff0c;即&#xff1a;左右排列。QVBoxLayout&#xff1a;垂直布局&#xff0c;在垂直…...

GO语言,半自动打怪

仅供学习参考&#xff0c;切勿用于商业用途 package mainimport ("fmt""github.com/go-vgo/robotgo""math/rand""time" )const (taskNum 7 )type Task struct {Name stringSleepTime1 intSleepTime2 intFunc func() }fu…...

【Java 进阶篇】Java登录案例详解

登录是Web应用程序中常见的功能&#xff0c;它允许用户提供凭证&#xff08;通常是用户名和密码&#xff09;以验证其身份。本文将详细介绍如何使用Java创建一个简单的登录功能&#xff0c;并解释登录的工作原理。我们将覆盖以下内容&#xff1a; 登录的基本概念创建一个简单的…...

Vue 菜单导航栏,轮播图

导航菜单栏结构和样式代码实现 一级导航栏 views/HomeView.vue <template><div><Shortcut></Shortcut><Header></Header><div class"inner"><Navigation></Navigation></div><div>我是主页&l…...

讲述为什么要学习Adobe XD以及 Adobe XD下载安装

首先 我们要了解 Adobe XD 是个什么东西 XD是Adobe公司专门开发出来面向交互、界面设计的矢量绘图工具。 然后是 他可以做什么&#xff1f; 最基本的 可以做UI界面设置 所有 手机 平板 电脑等设备的UI界面 我们都可以通过XD完成 还有就是原型设置 我们可以做各种界面图 还有…...

Netty复习:(1)Http server: hello world

一、加依赖 <dependency><groupId>io.netty</groupId><artifactId>netty-all</artifactId><version>4.1.72.Final</version></dependency>二、创建自定义的handler package cn.edu.tju.handler;import io.netty.buffer.ByteB…...

【Python 千题 —— 基础篇】加法计算

题目描述 题目描述 编写一个程序&#xff0c;接受用户输入的两个数字&#xff0c;然后计算这两个数字的和&#xff0c;并输出结果。 输入描述 输入两个数字&#xff0c;用回车隔开两个数字。 输出描述 程序将计算这两个数字的和&#xff0c;并输出结果。 示例 示例 ① …...

基于纵横交叉算法的无人机航迹规划-附代码

基于纵横交叉算法的无人机航迹规划 文章目录 基于纵横交叉算法的无人机航迹规划1.纵横交叉搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要&#xff1a;本文主要介绍利用纵横交叉算法来优化无人机航迹规划。 …...

D-Bus:数据类型

D-Bus中描述接口的属性和方法,有其自己定义的一套签名描述方式: 数据类型描述符号对应C++数据类型avector/array数组, ai表示的是vector<int32_t>bboolddouble双精度浮点数iint32_t,32位有符号整数nint16_t,16位有符号整数oobject_path对象路径quint16_t,16位无符号…...

BI零售数据分析,告别拖延症,及时掌握一线信息

在日常的零售数据分析中&#xff0c;经常会因为数据量太大&#xff0c;分析指标太多且计算组合多变而导致数据分析报表难产&#xff0c;零售运营决策被迫拖延症。随着BI数据可视化分析技术的发展&#xff0c;智能化、可视化、自助分析的BI数据分析逐渐成熟&#xff0c;形成一套…...

[BUUCTF NewStarCTF 2023 公开赛道] week4 crypto/pwn

再补完这个就基本上完了. crypto RSA Variation II Schmidt-Samoa密码系统看上去很像RSA,其中Npqq, 给的eN给了d from secret import flag from Crypto.Util.number import *p getPrime(1024) q getPrime(1024)N p*p*qd inverse(N, (p-1)*(q-1)//GCD(p-1, q-1))m bytes…...

论文范文:论基于架构的软件设计方法及应用

注意:范文只适用于帮助大家打开写作思路,并不能作为素材直接用于平时练习、考试中。考试中直接使用范文的素材,会有被认定为雷同卷的风险。 摘要: 2022年4月,本人所在单位计划研发生态集装箱管理控制平台项目。该平台主要用于与现有公司生态集装箱产品做对接,达到远程控制…...

C语言 指针进阶笔记

p和*p: 如图&#xff0c;p是指针&#xff0c;指针存放着地址&#xff0c;打印出来应该是数组的值 *p是指针里里面的元素 #include<stdio.h> int main() {int a1;int b2;int c3;int p[3]{a,b,c};printf("%d",*p); return 0; } 那么现在的打印结果应该为数组的…...

数据库认证 | Oracle OCP好考吗

数据库对于很多技术人员来说都不陌生&#xff0c;但是你想深入了解的话&#xff0c;那么考个证书也许就是一个不错的选择。 如果能考个Oracle OCP认证的话&#xff0c;那也确实不错。那么Oracle OCP好考吗&#xff1f;下面我们就来了解一下吧。 01 Oracle OCP好考吗 OCP考试还…...

处理大数据的基础架构,OLTP和OLAP的区别,数据库与Hadoop、Spark、Hive和Flink大数据技术

处理大数据的基础架构&#xff0c;OLTP和OLAP的区别&#xff0c;数据库与Hadoop、Spark、Hive和Flink大数据技术 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#xff0c;可能很多算法学生都得去找开发&#xff0c;测开 测开的话&am…...

解决计算机msvcp120.dll文件丢失的5种方法,亲测有效

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“msvcp120.dll丢失”。这个错误提示可能会给我们带来很大的困扰&#xff0c;影响我们的正常使用。本文将详细介绍msvcp120.dll丢失的原因、解决方法以及预防措施&#xff0c;帮助大家更好地…...

Python selenium交互

视频版教程&#xff1a;一天掌握python爬虫【基础篇】 涵盖 requests、beautifulsoup、selenium selenium可以模拟用户点击事件&#xff0c;以及控制浏览器前进&#xff0c;后退等操作。 下面是一个模拟百度搜索&#xff0c;点击下一页&#xff0c;控制浏览器后退&#xff0c…...

超短脉冲激光自聚焦效应

前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应&#xff0c;这是一种非线性光学现象&#xff0c;主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场&#xff0c;对材料产生非线性响应&#xff0c;可能…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:

一、属性动画概述NETX 作用&#xff1a;实现组件通用属性的渐变过渡效果&#xff0c;提升用户体验。支持属性&#xff1a;width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项&#xff1a; 布局类属性&#xff08;如宽高&#xff09;变化时&#…...

2.Vue编写一个app

1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

MySQL中【正则表达式】用法

MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现&#xff08;两者等价&#xff09;&#xff0c;用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例&#xff1a; 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

高防服务器能够抵御哪些网络攻击呢?

高防服务器作为一种有着高度防御能力的服务器&#xff0c;可以帮助网站应对分布式拒绝服务攻击&#xff0c;有效识别和清理一些恶意的网络流量&#xff0c;为用户提供安全且稳定的网络环境&#xff0c;那么&#xff0c;高防服务器一般都可以抵御哪些网络攻击呢&#xff1f;下面…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj&#xff0c;再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

【Go语言基础【12】】指针:声明、取地址、解引用

文章目录 零、概述&#xff1a;指针 vs. 引用&#xff08;类比其他语言&#xff09;一、指针基础概念二、指针声明与初始化三、指针操作符1. &&#xff1a;取地址&#xff08;拿到内存地址&#xff09;2. *&#xff1a;解引用&#xff08;拿到值&#xff09; 四、空指针&am…...

Go 并发编程基础:通道(Channel)的使用

在 Go 中&#xff0c;Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式&#xff0c;用于在多个 Goroutine 之间传递数据&#xff0c;从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...

HybridVLA——让单一LLM同时具备扩散和自回归动作预测能力:训练时既扩散也回归,但推理时则扩散

前言 如上一篇文章《dexcap升级版之DexWild》中的前言部分所说&#xff0c;在叠衣服的过程中&#xff0c;我会带着团队对比各种模型、方法、策略&#xff0c;毕竟针对各个场景始终寻找更优的解决方案&#xff0c;是我个人和我司「七月在线」的职责之一 且个人认为&#xff0c…...

用鸿蒙HarmonyOS5实现中国象棋小游戏的过程

下面是一个基于鸿蒙OS (HarmonyOS) 的中国象棋小游戏的实现代码。这个实现使用Java语言和鸿蒙的Ability框架。 1. 项目结构 /src/main/java/com/example/chinesechess/├── MainAbilitySlice.java // 主界面逻辑├── ChessView.java // 游戏视图和逻辑├──…...