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

阶段十-java新特性

JDK9新特性

1.模块化系统

      jar包结构的变化

        jar -》model -》package -》class

      通过不同的模块进行开发

      每个模块都有自己的模块配置文件module-info.java

2.JShell

        JDK9自带的命令行开发,在进行简单的代码调试时可以直接编译使用

        可以定义变量,方法,和java中的一样

        /list 所有的代码片段 /vars 所有的变量  /methods 所有的方法

 

3.接口私有方法

       

4.钻石操作符使用升级

在jdk8中,如下代码是报错的

Comparator<Object> com = new Comparator<>() {@Overridepublic int compare(Object o1, Object o2) {return 0;}
};

<>必须写类型。

而在jdk9中,上述代码就不报错,这是对<>钻石运算符的一个升级。

5.try语句升级

6.String存储结构变更

String底层的char[]字符数组发生改变,变成了byte[]字节数组

StringBuffer和StringBuilder也变成了byte[]字节数组

ISO-8859-1/Latin-1(每个字节一个字节)的字符字符)或UTF-16(每个字符两个字节),具体取决于内容字符串的。编码标志将指示使用哪种编码。

7.集合特性of

public class Demo {public static void main(String[] args) {//对于不可变集合的增强//JDK8创建一个不可变集合ArrayList<String> list = new ArrayList<>();list.add("张三");list.add("张三");list.add("张三");//集合工具类Collection<String> results = Collections.unmodifiableCollection(list);System.out.println(results);//报错/*results.add("李四");System.out.println(results);*///JDK9中创建自读集合List<String> list2 = List.of("张三", "张三", "张三");//报错/*list2.set(0,"李四");*/System.out.println(list2);Set<String> set1 = Set.of("AA", "BB", "CC");System.out.println(set1);Map<String, String> map = Map.of("k1", "v1", "k2", "v2");System.out.println(map);}
}

8.InputStream增强

public class Demo {public static void main(String[] args) throws Exception{//直接通过一个方法将输入流传递到输出流FileInputStream fileInputStream = new FileInputStream("D:\\a.txt");FileOutputStream fileOutputStream = new FileOutputStream("D:\\b.txt");try(fileOutputStream;fileInputStream) {fileInputStream.transferTo(fileOutputStream);}catch (IOException e){e.printStackTrace();}}
}

9.增强的Stream API

public class Demo {public static void main(String[] args) {//从开头开始,到第一个不满足条件的结束List<Integer> list = Arrays.asList(10,20,30,40,30,20,10);list.stream().takeWhile(t->t<40).forEach(System.out::println);//和takeWhile相反,从头开始第一个不满足开始后面的List<Integer> list2 = Arrays.asList(5,20,30,50,60,20,10);list2.stream().dropWhile(t->t<40).forEach(System.out::println);//允许通过Stream<String> streams = Stream.of("AA","BB",null);System.out.println(streams.count());//不允许通过Stream<Object> stream1 = Stream.of(null);System.out.println(stream1.count());//允许通过,ofNullable中可以为一个nullStream<Object> stream2 = Stream.ofNullable(null);System.out.println(stream2.count());//iterate//可以提供条件结束迭代//原本的方式Stream.iterate(1,integer -> integer + 1).limit(50).forEach(System.out::println);//增强的方式//条件写在括号里面Stream.iterate(1,i -> i<60,i -> i + 1).forEach(System.out::println);}
}

10.Optional 类中stream()使用

public class Demo {public static void main(String[] args) {List<String> list = new ArrayList<>();list.add("张三");list.add("李四");list.add("王五");list.add("赵六");Optional<List<String>> optional = Optional.ofNullable(list);optional.stream().forEach(System.out::println);//flatMap可以便利Optional中的每一个元素optional.stream().flatMap(x->x.stream()).forEach(System.out::println);}
}

JDK10新特性

1.局部变量类型推断

java是强语言类型,前面是什么类型,后面就是什么类型,这个var能推断出后面是什么类型

js是弱语言类型,什么类型都行

public class Demo {public static void main(String[] args) {//局部类型推断var i = 1;var list = new ArrayList<String>();//不能推断的情况//初始值为nullvar a = null;//方法引用var r = System.out::println;//Lambda表达式var c = (Integer b) -> {return b+"";};var d = {2,3,4};}
}

var 不是一个关键字:你不需要担心变量名或方法名会与 var发生冲突

2.新增不可变集合方法(只读)

public class Demo1 {public static void main(String[] args) {//只读集合增强//将不是只读集合的集合变成只读集合//copyOf//示例1var list1 = List.of("AA","BB","CC");var list2 = List.copyOf(list1);System.out.println(list1==list2);//true//示例2var list3 = new ArrayList<String>();list3.add("AA");list3.add("BB");List<String> list4 = List.copyOf(list3);System.out.println(list3==list4); //false}
}

JDK11新特性

1.垃圾回收器ZGC

2.Optional加强

isEmpty()判断是否为空

3.新增HTTP客户端API

public static void main(String[] args) throws Exception {HttpClient client = HttpClient.newHttpClient();HttpRequest request =HttpRequest.newBuilder(URI.create("http://www.baidu.com")).build();HttpResponse.BodyHandler<String> responseBodyHandler = HttpResponse.BodyHandlers.ofString();HttpResponse<String> response = client.send(request, responseBodyHandler);String body = response.body();System.out.println(body);
}

JDK 14 新特性

空指针异常更加具体

JDK 16 新特性

switch增强

public class Demo {public static void main(String[] args) {int level = new Random().nextInt(12);String jiJi = null;switch (level){case 3,4,5 -> jiJi =  "春天";case 6,7,8 -> jiJi =  "夏天";case 9,10,11 -> jiJi =  "秋天";case 12,1,2 -> jiJi = "冬天";};System.out.println(jiJi);}
}

http://www.lryc.cn/news/259130.html

相关文章:

  • win10重装系统历程
  • 【知识积累】深度度量学习综述
  • webrtc网之sip转webrtc
  • 【Spring】依赖注入之属性注入详解
  • 6-tornado配置文件的使用(命令行解析、文件设置)
  • k8s ingress service endpoints 解决微信服务器验证问题(内网穿透)
  • postgresql-effective_cache_size参数详解
  • CUDA锁页内存的使用
  • python常见代码用法
  • MTU TCP-MSS(转载)
  • 【ARM Trace32(劳特巴赫) 高级篇 20 -- SNOOPer 使用介绍】
  • MySQL笔记-第11章_数据处理之增删改
  • ANSYS常见error解答(转)
  • 【Let‘s Encrypt SSL】使用 acme.sh 给 Nginx 安装 Let’s Encrypt 提供的免费 SSL 证书
  • XML学习及应用
  • Docker部署Nacos集群并用nginx反向代理负载均衡
  • C++STL的stack和queue(超详解)
  • 【C语言实现windows环境下Socket编程TCP/IP协议】
  • CGAL的3D简单网格数据结构
  • 正则表达式(9):扩展正则表达式
  • 静态SOCKS5:了解基本概念和协议
  • 用23种设计模式打造一个cocos creator的游戏框架----(十二)状态模式
  • js 转换为数组并返回(Array.of())
  • git上传文件夹后打不开,有@.....
  • 31、应急响应——Windows
  • QT linux下使用Qt Creator调试附加进程,加快调试
  • IDEA Maven项目如何引用本地jar包,并打包发布
  • Unity中Batching优化的GPU实例化(3)
  • Web应用JSON数据保护(密码算法、密钥、数字签名和数据加密)
  • 【软件安装】VMware安装Centos7虚拟机并且设置静态IP,实现Windows和Centos7网络互相访问