哈尔滨建设网站成本,wordpress编辑图片不显示,c2c网站建站的标准,台州网站建设设计目录
一、Java14新特性
1、instanceof模式匹配
2、友好的空指针(NullPointerException)提示
3、record类型
二、Java15新特性
1、Sealed Classes
2、CharSequence新增方法
3、TreeMap新增方法
4、文本块
5、无需配置环境变量
三、Java16新特性
1、包装类构造方法的…目录
一、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 obj1;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小米, age18]System.out.println(user.name());//小米user.study();//study}
}
反编译
D:\xxxx....xxxxjavap -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.exejavaw.exejavac.exejshell.exe这几个命令添加到环境变量中。
三、Java16新特性
1、包装类构造方法的警告
使用包装类的构造方法在编译的时候会出现警告不建议再使用包装类的构造方法下面代码在javac编译之后会出现警告
public class Test {public static void main(String[] args) {Integer inew Integer(6);System.out.println(i);synchronized (i){//警告Integer 因有缓存池不相关代码也可能互相影响}}
} Deprecated(since9, 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新特性 一个程序员最重要的能力是写出高质量的代码 有道无术术尚可求也有术无道止于术。 无论你是年轻还是年长所有程序员都需要记住时刻努力学习新技术否则就会被时代抛弃