part2. jdk9/10/11/12/16新特性详解

1.jdk9

1.1 模块化机制

在这里插入图片描述

定义模块:module-info.java

module com.newfeature.test
{requires java.se;requires lombok;requires junit;
}
package com.newfeature.test;import java.lang.reflect.Field;public class Main {public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {Class<String> stringClass=String.class;Field field=stringClass.getDeclaredField("value");field.setAccessible(true);System.out.println(field.get("ABC"));}
}

输出结果:

Exception in thread "main" java.lang.reflect.InaccessibleObjectException: Unable to make field private final byte[] java.lang.String.value accessible: module java.base does not "opens java.lang" to module com.newfeature.testat java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:354)at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297)at java.base/java.lang.reflect.Field.checkCanSetAccessible(Field.java:178)at java.base/java.lang.reflect.Field.setAccessible(Field.java:172)at com.newfeature.test/com.newfeature.test.Main.main(Main.java:10)

暴露如上错误:需要开放模块的反射权限

在这里插入图片描述

java --list-modules 列出所有模块
在这里插入图片描述

open module com.newfeature.test  //open开发模块反射权限
{requires java.se;requires lombok;  //requires 导入模块requires transitive  junit; //定义模块的传递引用//opens   com.newfeature.test;   //opens开放模块权限给其他模块uses com.newfeature.test.Test;//uses 指定模块使用的抽象类或接口实现provides  com.newfeature.test.Test with com.newfeature.test.TestImpl;//提供接口的实现类
}

1.2 jshell交互式编程

在这里插入图片描述
在这里插入图片描述

1.3 接口中支持private方法

  • jdk8接口中支持的默认方法
 public interface Test {/*** 定义jdk8接口中支持的默认方法*/default  void test(){System.out.println("test方法默认实现");}}
  • jdk9,接口中可以有私有方法,私有方法必须有方法体,只有接口中默认其他方法可以调用

    package com.newfeature.test;public interface Test {private static  void inner(){System.out.println("接口中私有方法");}static  void  add(){inner();//todo}
    }
    

1.4 集合类新增工厂方法

package com.newfeature.test;import java.util.HashMap;
import java.util.Map;public class MapDemo1 {public static void main(String[] args) {//创建map对象方式1Map<String,Integer> map=new HashMap<>();map.put("AAA",12);map.put("BBB",13);map.put("CCC",13);System.out.println(map);//jdk9 之后,通过of方法快速创建map对象,是只读的,不可以修改Map<String,Integer> map2=Map.of("AAA",18,"BBB",19);System.out.println(map2);map2.put("ddd",18);System.out.println(map2);}
}

输出结果:

{AAA=12, CCC=13, BBB=13}
{BBB=19, AAA=18}
Exception in thread "main" java.lang.UnsupportedOperationExceptionat java.base/java.util.ImmutableCollections.uoe(ImmutableCollections.java:142)at java.base/java.util.ImmutableCollections$AbstractImmutableMap.put(ImmutableCollections.java:1072)at com.newfeature.test/com.newfeature.test.MapDemo1.main(MapDemo1.java:20)
List<String> str=List.of("2","4","6");
Set<Integer> set=Set.of(5, 6,9);
System.out.println(str);
System.out.println(set);

输出:

[2, 4, 6]
[9, 6, 5]

注意:输出顺序和 添加顺序不一样。也是只读的

1.5 jdk9对stream做了 改进

package com.newfeature.test;import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Stream;public class MapDemo1 {public static void main(String[] args) {//jdk8Stream.of(null).forEach(System.out::println);Stream.ofNullable(null)  //jdk9新增的ofNullable方法,出现传入null不会报错.forEach(System.out::println);}
}

输出结果:

jdk8

Exception in thread "main" java.lang.NullPointerException: Cannot read the array length because "array" is nullat java.base/java.util.Arrays.stream(Arrays.java:5428)at java.base/java.util.stream.Stream.of(Stream.java:1426)at com.newfeature.test/com.newfeature.test.MapDemo1.ma

jdk9 输出无错误

  • 迭代输出
 package com.newfeature.test;import java.util.stream.Stream;public class MapDemo1 {public static void main(String[] args) {//jkd8 stream 迭代输出Stream.iterate(0,i->i+1).limit(20)    //限制生成20个.forEach(System.out::println);System.out.println("-----------------------------------");//jdk9 stream迭代输出 ,参考:for(int i=0;i<20;i++)Stream.iterate(0,i->i<20,i->i+1).forEach(System.out::println);}}
  • 数据截断

  • package com.newfeature.test;import java.util.stream.Stream;public class MapDemo1 {public static void main(String[] args) {Stream.iterate(0,i->i<20,i->i+1).takeWhile(i-> i<10)   //大于10就截断.forEach(System.out::println);}
    }
    

输出:

0
1
2
3
4
5
6
7
8
9
  • 跳过一定的数据
 package com.newfeature.test;import java.util.stream.Stream;public class MapDemo1 {public static void main(String[] args) {Stream.iterate(0,i->i<20,i->i+1).dropWhile(i-> i<10)   //大于10就输出.forEach(System.out::println);}}

输出:

10
11
12
13
14
15
16
17
18
19
  • jdk9新增 ifPresentOrElse 判空处理
 package com.newfeature.test;import java.util.Optional;public class MapDemo1 {public static void main(String[] args) {String str=null;Optional.ofNullable(str).ifPresentOrElse(s->{System.out.println("s="+s);},()->{System.out.println("s为空了");});}}
  • or方法替换optional类

  • package com.newfeature.test;import java.util.Optional;public class MapDemo1 {public static void main(String[] args) {String str=null;Optional.ofNullable(str).or(()->Optional.of("AAA"))//如果当前被包装的类不是null,返回自己,但是如果为null返回supplier提供另一个optional类(即可以传入一个默认值).ifPresent(System.out::println);}
    }
    

2.jdk10新特性

2.1 局部变量类型推断

package com.newfeature.test;public class MapDemo1 {public static void main(String[] args) {var s="hello";System.out.println(s);System.out.println(s.getClass());}
}

输出结果:

hello
class java.lang.String

注意:var必须定义变量必须有初始值,才可以推断类型;var仅使用于局部变量定义

3.jdk11新特性

3.1 lambda形参局部变量

package com.newfeature.test;import java.util.function.Consumer;public class MapDemo1 {public static void main(String[] args) {Consumer<String> consumer=(var s)->{System.out.println(s);};consumer.accept("AAA");}
}

3.2 String类的方法增强

package com.newfeature.test;public class MapDemo1 {public static void main(String[] args) {String str="  ";System.out.println(str.isBlank());//判断全部是否都是空格String hi="world";System.out.println(hi.repeat(3));//让字符hi重复3次String ln="AB\nC\nD";System.out.println(ln.lines().count());//lines()进行换行String strr=" A B C D ";System.out.println(strr.strip());//去除首尾空格System.out.println(strr.stripLeading());//去掉首部空格System.out.println(strr.stripTrailing());//去掉尾部空格}
}

3.3 全新的httpclient api

public static void main(String[] args) throws URISyntaxException, IOException, InterruptedException {HttpClient client=HttpClient.newHttpClient();HttpRequest request = HttpRequest.newBuilder(new URI("https://www.baidu.com")).GET().build();HttpResponse<String>   response=client.send(request, HttpResponse.BodyHandlers.ofString());System.out.println(response.body());}

4 jdk 12~17 switch表达式

 /*** switch表达式使用* @param score* @return*/public static String grade(int score){score /= 10;return switch (score){case 10,9 ->"优秀";case 8,7 ->"良好";case 6->"及格";default -> "不及格";};}/*** switch表达式使用* @param score* @return*/public static String grade1(int score){score /= 10;return switch (score){case 10,9 ->"优秀";case 8,7 ->"良好";case 6->"及格";default -> {System.out.println("判决及格与否");yield "不及格";}};}public static String grade3(int score){score /= 10;return switch (score){case 10,9:yield "优秀";case 8,7: yield "良好";case 6 :yield"及格";default:System.out.println("判决及格与否");yield "不及格";};}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/648064.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Element UI样式修改之NavMenu导航菜单箭头样式修改

UI设计稿给的菜单箭头样式可能与我们饿了么组件NavMenu的菜单箭头样式不一致,目前我们侧边导航菜单的上下翻转箭头如下所示: 希望得到如下的结果: 找到饿了么Icon里我们想要向下箭头,F12后复制content内容content: “\e790”; content: "\e790";然后将默认的c…

C语言基本概念

目录 2.1 编写一个简单的C程序 2.1.1 编译和链接 2.1.2 集成开发环境 2.2 简单程序的一般形式 2.2.1 指令 2.2.2 函数 2.2.3 语句 2.3 注释 2.4 变量和赋值 2.4.1 类型 2.4.2 声明 2.4.3 赋值 2.4.4 显示变量的值 2.4.5 初始化 2.4.6 显示表达式的值 2.5 读入…

网络通信(15)-C#TCP客户端掉线重连实例

本文上接前面的文章使用Socket在C#语言环境下完成TCP客户端的掉线重连实例。 掉线重连需要使用心跳包发送测试网络的状态,进而进入重连循环线程。 前面实例完成的功能: 客户端与服务器连接,实现实时刷新状态。 客户端接收服务器的数据。 客户端发送给服务器的数据。 客…

pytorch代码实现注意力机制之MLCA

MLCA注意力机制 简要&#xff1a;注意力机制是计算机视觉中使用最广泛的组件之一&#xff0c;可以帮助神经网络强调重要元素并抑制不相关的元素。然而&#xff0c;绝大多数信道注意力机制仅包含信道特征信息而忽略了空间特征信息&#xff0c;导致模型表示效果或目标检测性能较…

docker之部署青龙面板

青龙面板是一个用于管理和监控 Linux 服务器的工具&#xff0c;具有定时运行脚本任务的功能。在实际情况下也可以用于一些定期自动签到等任务脚本的运行。 本次记录下简单的安装与使用&#xff0c;请提前安装好docker&#xff0c;参考之前的文章。 一、安装部署 1、拉取镜像 # …

weak_ptr 与 一个难发现的错误(循环依赖问题)笔记

推荐B站视频&#xff1a;7.weak_ptr与一个非常难发现的错误_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV18B4y187uL/?p7&spm_id_frompageDriver&vd_sourcea934d7fc6f47698a29dac90a922ba5a3一、weak_ptr weak_ptr并不拥有所有权并不能调用 -> 和 解引…

ACL--访问控制列表概述、组成、分类、应用

目录 一、ACL概述 二、ACL的组成 三、ACL分类 四、举例说明 1、基于标准ACL和基础的高级ACL应用 2、基于端口的ACL 一、ACL概述 访问控制列表ACL&#xff08;Access Control List&#xff09;是由一条或多条规则组成的集合。所谓规则&#xff0c;是指描述报文匹配条件的…

黑马程序员——javase进阶——day02——关键字,接口,代码块,枚举

目录&#xff1a; Java中的关键字 static关键字final关键字Java中的权限修饰符代码块 构造代码块静态代码块接口 接口的介绍接口的定义和特点接口的成员特点接口的案例接口中成员方法的特点枚举随堂小记 继承方法重写抽象类模板设计模式staticfinal权限修饰符接口回顾上午内容…

大数据开发之Spark(完整版)

第 1 章&#xff1a;Spark概述 1.1 什么是spark 回顾&#xff1a;hadoop主要解决&#xff0c;海量数据的存储和海量数据的分析计算。 spark是一种基于内存的快速、通用、可扩展的大数据分析计算引擎。 1.2 hadoop与spark历史 hadoop的yarn框架比spark框架诞生的晚&#xff…

Objective-C方法的声明实现及调用

1.无参数的方法 1)声明 a.位置&#xff1a;在interface括弧的外面 b.语法&#xff1a; - (返回值类型)方法名称; interface Person : NSObject -(void) run; end 2)实现 a.位置&#xff1a;在implementation中实现 b.语法&#xff1a;加大括弧将方法实现的代码写在大括孤之中 …

KernelGPT: LLM for Kernel Fuzzing

KernelGPT: Enhanced Kernel Fuzzing via Large Language Models 1.Introduction2.Background2.1.Kernel and Device Drivers2.2.Kernel Fuzzing2.2.1.Syzkaller规约2.2.2.规约生成 3.Approach3.1.Driver Detection3.2.Specification Generation3.2.1.Command Value3.2.2.Argum…

基于静态顺序表实现通讯录

目录 一、设计框架 1、功能要求​ 2、菜单函数的实现 二、头文件实现​ Contact.h SeqList.h 三、Test.h 四、通讯录的初始化和销毁 五、增加通讯录 六、在通讯录中查找姓名下标 七、删除通讯录 八、显示通讯录 九、查找通讯录 一、设计框架 test.c&#xff1a;通…

《尊思想人文地理环境》新书亮相,叶无为集30年智慧破解环境密码

在探索人与自然和谐共生的今天&#xff0c;叶无为教授的新作《尊思想人文地理环境》应时而生&#xff0c;为读者揭开了地理环境与人文发展之间深刻联系的神秘面纱。本书集结了作者三十多年的实战经验&#xff0c;通过易医体系对大自然的山川河流进行独到解析&#xff0c;融合传…

飞越天空之城

欢迎来到程序小院 飞越天空之城 玩法&#xff1a;左边的按钮是控制小人儿飞起来的方向的&#xff0c;右边的按钮是控制它飞的高度的&#xff0c; 左边控制在正上方时可以让小人儿沿着一个方向飞跃&#xff0c;否则会撞到两边的黑墙&#xff0c; 右边的按钮如果加足够的话&…

GPTs大受欢迎但问题多,企服厂商的AI Agent更被B端客户器重

2023年11月&#xff0c;OpenAI在首届开发者大会上推出了GPTs和Assitant API&#xff0c;不仅改写了AI Agent的构建范式&#xff0c;也把AI智能体的应用推向一个新高潮。 GPTs和GPT商店&#xff0c;使得用户无需编码通过自然语言就能创建并拥有多个专属私人助理&#xff0c;且可…

【Servlet】如何编写第一个Servlet程序

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【Servlet】 本专栏旨在分享学习Servlet的一点学习心得&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; Servlet是Java编写的服务器端…

5.【SpringBoot3】文件上传

1. 文件上传到本地 需求分析 在用户更换头像或发布文章时&#xff0c;需要携带一个图片的 url 地址&#xff0c;该 url 地址是当用户访问文件上传接口&#xff0c;将图片上传成功后&#xff0c;服务器返回的地址。所以&#xff0c;后台需要提供一个文件上传接口&#xff0c;用…

Android HIDL概述与绑定模式的实现

一、前言 Android O(8.0) 版本之后&#xff0c;底层实现有了比较大的变化&#xff0c;最显著的一个方面就是 HIDL 机制的全面实施。本文对于理解系统源码中 Gnss、Usb、Camera 等模块的工作原理有极大帮助。 二、HIDL 设计目的 在 Android O(8.0) 之前系统的升级牵扯多方协作…

Python tkinter (5) 选项按钮与复选框

Python的标准Tk GUI工具包的接口 tkinter系列文章 python tkinter窗口简单实现 Python tkinter (1) —— Label标签 Python tkinter (2) —— Button标签 Python tkinter (3) —— Entry标签 Python tkinter (4) —— Text控件 目录 CheckButton 简单示例 获取选中 Ra…

RBD —— Visualizing fractured geometry

RBD Exploded View&#xff08;与Exploded View SOP类似&#xff09;从中心炸开几何体&#xff0c;以更好查看被破碎和约束的碎块&#xff1b; 可视化高精度和低精度几何体的不同&#xff0c;Show Proxy Geometry显示代理几何体&#xff1b; Show Constraints显示约束&#xff…