jdk7、jdk8、jdk21及其他版本新特性汇总

jdk7、jdk8、jdk21及其他版本新特性汇总jdk 下载链接 jdk 是否收费 1 jdk7 新特性 二进制字面量 jdk7 开始 可以用二进制字面量表示整数 byte short int long 使用二进制字面量可以让代码简介更易理解 使用时需要在二进制前加 0b 或者 0B 示例如下 int a 0b 字面量支持下划线

大家好,我是讯享网,很高兴认识大家。


讯享网

1.jdk7新特性

  1. 二进制字面量
    jdk7开始,可以用二进制字面量表示整数(byte、short、int、long)。使用二进制字面量可以让代码简介更易理解,使用时需要在二进制前加0b或者0B,示例如下:
int a = 0b 

讯享网
  1. 字面量支持下划线
    下划线不能出现在小数点旁、不能出现在数值开头和解围、不能出现在数值标示和进制之间,示例如下:
讯享网int a = 0b110_110 
  1. swith语句支持字符串,示例如下:
switch(str) case a: break; case b: break; 
  1. 泛型自动推断,示例如下:
讯享网List<String> list = new Arraylist<>(); 
  1. 异常多个catch合并,异常之间用|分割,示例如下:
try(){ 
    } catch(IOExcepton | NullPointerException e) { 
    } 
  1. try-with-resource语句支持
    之前使用流时需要在finally里手动关闭释放资源,现在只要接口实现java.lang.AutoCloseable,系统会自动关闭资源,示例如下:
讯享网private static void method() { 
    FileReader fr = null; FileWriter fw = null; try { 
    fr = new FileReader("a.txt"); fw = new FileWriter("b.txt"); int ch = 0; while ((ch = fr.read()) != -1) { 
    fw.write(ch); } } catch (IOException e) { 
    e.printStackTrace(); } finally { 
    if (fw != null) { 
    fw.close(); } if (fw != null) { 
    fr.close(); } } // 改进版的代码 try (FileReader fr = new FileReader("a.txt"); FileWriter fw = new FileWriter("b.txt");) { 
    int ch = 0; while ((ch = fr.read()) != -1) { 
    fw.write(ch); } } catch (IOException e) { 
    e.printStackTrace(); } } 

2.jdk8新特性

  1. lambada表达式
    lambada表达式也可成为闭包,允许将函数作为参数传递。lambada表达式组成:逗号分割的参数列表,-> ,函数体三部分表示,函数体比较复杂时可以将函数体放在{},示例如下:
new Thread( () -> System.out.println("In Java8, Lambda expression rocks !!") ).start(); 
  1. 日期API
    java.util.Date是非线程安全的,时区处理比较麻烦,jdk8在java.time包下提供了很多新的API,以下是两个重要的API:
    Local:简化了日期处理,没有时区问题
    Zoned:通过制定的时区处理日期时间
    示例如下:
讯享网LocalDate.now(); // 获取当前时间 ZonedDateTime.now(Clock.systemUTC()); // 获取UTC时区的时间 
  1. 引入Optional,常用方法如下:
1Optional.of(T t): 创建一个Optional 实例 (2Optional.empty(): 创建一个空的Optional 实例 (3Optional.ofNullable(T t):若t不为null,创建 Optional 实例,否则创建空实例 (4isPresent():判断是否包含值 orElse(T t): 如果调用对象包含值,返回该值,否则返回t (5orElseGet(Supplier s):如果调用对象包含值,返回该值,否则返回s获取的值 (6map(Function f):如果有值对其处理,并返回处理后的Optional,否则返回Optional.empty()7flatMap(Function mapper):与 map 类似,要求返回值必须是Optional 
  1. Stream流,可对集合进行复杂的查找、过滤、去重、排序等,示例如下:
讯享网 Map<Integer, Integer> map = new HashMap<>(); map.put(10, 10); map.put(31, 31); map.put(53, 53); map.put(86, 86); map.put(20, 20); // 转list List<Integer> list = map.keySet().stream().collect(Collectors.toList()); // 过滤获取偶数 list = list.stream().filter(item -> item % 2 == 0).collect(Collectors.toList()); // 从大到小排序 list = list.stream().sorted((a, b) -> b - a).collect(Collectors.toList()); list.stream().forEach(item -> { 
   System.out.println(item);}); 
  1. 接口可以定义默认方法、静态方法
    默认方法:传统方式接口中定义的方法都是抽象方法,实现接口的类都需要实现抽象方法,接口中如果需要新增方法,所有类都要实现,不符合OCP原则。jdk8引入了默认方法,使用default关键字定义,可以有具体方法实现,实现类不必做修改。如果多个接口都有默认方法,可以用super指定默认方法,也可以自己实现覆盖。示例如下:
public interface Test{ 
    default void hello(){ 
    System.out.println("我是接口默认方法,哈哈!"); } } 
讯享网 静态方法:接口中可以实现静态方法,示例如下: 
public interface Test { 
    public static void sysHello() { 
    System.out.println("你好啊,我是接口静态方法!"); } } 
  1. 函数式接口
    如果一个接口只有一个抽象方法,该接口可以称之为函数式接口,函数式接口可以使用lambada表达式,lambada会被匹配到这个抽象方法上,@FunctionalInterface注解检测接口是否符合函数式接口,常见的函数式接口Predicate,Function<T,R>,示例如下:
讯享网public class Test03 { 
    public static void main(String[] args) { 
    Operater o=arr -> { 
    int sum=0; for(int n:arr){ 
    sum+=n; } System.out.println("数组的和为:"+sum); }; fun(o); } public static void fun(Operater operater){ 
    int[] arr={ 
   2,3,4,5,6,7,11}; operater.getSum(arr); } } @FunctionalInterface interface Operater{ 
    //求数组的和 public abstract void getSum(int[] arr); } 
  1. 方法引用
    方法引用是lambada的一种简写形式。如果lambada表达式方法体中只是调用一个特定的已存在的方法,则可以使用方法引用。常见形式:
对象::实例方法 类::静态方法 类::实例方法 类::new 
小讯
上一篇 2025-03-13 09:26
下一篇 2025-03-31 15:04

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/117443.html