701 Java9新特性:InputStream中的transferTo()方法
/**
* @Description: Java9新特性:InputStream中的transferTo()方法
* @Author: JOKER
* @Date: 11:43 2022/12/12
* @Params: []
* @return: void
*/
@Test
public void testInputStream(){
try(InputStream is = new FileInputStream("hello.txt");
OutputStream os = new FileOutputStream("src//hello1.txt")) {
//把输入流中的所有数据直接自动地复制到输出流中
is.transferTo(os);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
702 Java9新特性: StreamAPI新增的4个方法
/**
* @Description: Stream 接口中添加了 4 个新的方法:
* takeWhile, dropWhile, ofNullable,还有个 iterate 方法的新重载方法,可以
* 让你提供一个 Predicate (判断条件)来指定什么时候结束迭代。
* @Author: JOKER
* @Date: 12:44 2022/12/12
* @Params: []
* @return: void
*/
@Test
public void testStreamAPI(){
/*
1、takeWhile 返回从开头开始的符合条件的元素 第一次不符合后即停止
*/
Stream.of(14, 53, 76, 342, 234, 56, 878, 0, 80, 3424).takeWhile(x->x<350).forEach(System.out::println);
System.out.println();
/*
2、dropWhile() 与 takeWhile 相反,返回剩余的元素。 从开头开始的符合条件的元素都drop掉 之后的都保留下来
*/
Stream.of(14, 53, 76, 342, 234, 56, 878, 0, 80, 3424).dropWhile(x->x<350).forEach(System.out::println);
System.out.println();
/*
3、Java 9 中的 ofNullable 方法允许我们创建一个单元素 Stream,可以包含一个非空元素,也可以创建一个空Stream。
*/
// Stream<Object> stream1 = Stream.of(null); // 报NullPointerException
// System.out.println(stream1.count());
/* 不报异常,允许通过 */
Stream<String> stringStream = Stream.of("AA", "BB", null);
System.out.println(stringStream.count());// 3
/* 不报异常,允许通过 */
List<String> list = new ArrayList<>();
list.add("AA");
list.add(null);
System.out.println(list.stream().count());// 2
// ofNullable():允许值为null
Stream<Object> stream1 = Stream.ofNullable(null);
System.out.println(stream1.count());// 0
Stream<String> stream = Stream.ofNullable("hello world");
System.out.println(stream.count());// 1
System.out.println();
/*
4、 iterate 方法的新重载方法,可以让你提供一个 Predicate (判断条件)来指定什么时候结束迭代。
*/
// 原来的控制终止方式:
Stream.iterate(1,x->x+1).limit(10).forEach(System.out::println);
//现在的终止方式: iterate(T seed,判断条件,迭代方式) 类似 for循环
Stream.iterate(1,x->x<6,x->x+1).forEach(System.out::println);
}
703 Java9新特性:Optional的新方法Stream()
/**
* @Description: Java9新特性:Optional的新方法Stream()
* @Author: JOKER
* @Date: 13:28 2022/12/12
* @Params: []
* @return: void
*/
@Test
public void testOptional(){
ArrayList<String> list = new ArrayList<>();
list.add("赵");
list.add("钱");
list.add("孙");
Optional<ArrayList<String>> optionalArrayList = Optional.ofNullable(list);
optionalArrayList.stream().flatMap(s->s.stream()).forEach(System.out::println);
}
704 Java9新特性:升级的Nashorn引擎
Javascript引擎升级
705 Java10新特性的概述
706 java10新特性:局部变量类型推断
Local-Variable Type Inference 局部变量类型推断
/**
* @Description: Local-Variable Type Inference 局部变量类型推断
* @Author: JOKER
* @Date: 14:45 2022/12/12
* @Params: []
* @return: void
*/
@Test
public void testVar() throws Exception {
//例子1
LinkedHashSet<Integer> set = new LinkedHashSet<>();
Iterator<Integer> iterator = set.iterator();
var set1 = new LinkedHashSet<>();
var iterator1 = set1.iterator();
//例子2
URL url = new URL("https://www.baidu.com");
URLConnection connection = url.openConnection();
Reader reader = new BufferedReader(new
InputStreamReader(connection.getInputStream()));
var url1 = new URL("https://www.baidu.com");
var connection1 = url1.openConnection();
var reader1 = new BufferedReader(new
InputStreamReader(connection1.getInputStream()));
//例子3
var list = Arrays.asList(1,3,5,6,8);
//2.增强for循环中的索引
for(var v : list) {
System.out.println(v);
}
}
不适用以下 的结构中 :
情况1:没有初始化的局部变量声明
情况2:方法的返回类型
情况3:方法的参数类型
情况4:构造器的参数类型
情况5:属性
情况6:catch块
707 java10新特性:新增创建不可变集合的方法
/**
* @Description: Java 10 开始,Jdk里面为集合(List / Set /Map)都添加了
* copyOf 方法,用来创建不可变的集合
* @Author: JOKER
* @Date: 14:48 2022/12/12
* @Params: []
* @return: void
*/
@Test
public void testCopyOf(){
/*
使用of和copyOf创建的集合为不可变集合,不能进行添加、删除、替换、排序等操作,
不然会报 java.lang.UnsupportedOperationException 异常。
*/
//示例1:
var list1 = List.of("Java", "Python", "C");
var copy1 = List.copyOf(list1);
System.out.println(list1 == copy1); // true
//示例2:
var list2 = new ArrayList<String>();
var copy2 = List.copyOf(list2);
System.out.println(list2 == copy2); // false
/*
源码分析,可以看出copyOf方法会先判断来源集合是不是AbstractImmutableList类型的,
如果是,就直接返回,如果不是,则调用of创建一个新的集合。
示例2因为用的new创建的集合,不属于不可变AbstractImmutableList类的子类,
所以copyOf方法又创建了一个新的实例,所以为false。
*/
}
708 java11新特性的概述
JEP(JDK Enhancement Proposals,JDK 增强提案)
官网公开的 17 个JEP (JDK Enhancement Proposal 特性增强提议 )
- 181: Nest-Based Access Control(基于嵌套的访问控制)
- 309: Dynamic Class-File Constants(动态的类文件常量)
- 315: Improve Aarch64 Intrinsics(改进 Aarch64 Intrinsics)
- 318: Epsilon: A No-Op Garbage Collector(Epsilon 垃圾回收器,又被称为"No-Op(无操作)"回收器)
- 320: Remove the Java EE and CORBA Modules(移除 Java EE 和 CORBA 模块,JavaFX也已被移除)
- 321: HTTP Client (Standard)
- 323: Local-Variable Syntax for Lambda Parameters(用于 Lambda 参数的局部变量语法)
- 324: Key Agreement with Curve25519 and Curve448(采用 Curve25519 和 Curve448 算法实现的密钥协议)
- 327: Unicode 10
- 328: Flight Recorder(飞行记录仪)
- 329: ChaCha20 and Poly1305 Cryptographic Algorithms(实现 ChaCha20 和 Poly1305 加密算法)
- 330: Launch Single-File Source-Code Programs(启动单个 Java 源代码文件的程序)
- 331: Low-Overhead Heap Profiling(低开销的堆分配采样方法)
- 332: Transport Layer Security (TLS) 1.3(对 TLS 1.3 的支持)
- 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)(ZGC:可伸缩的低延迟垃圾回收器,处于实验性阶段)
- 335: Deprecate the Nashorn JavaScript Engine(弃用 Nashorn JavaScript 引擎)
- 336: Deprecate the Pack200 Tools and API(弃用 Pack200 工具及其 API)
709 java11新特性:String新增的方法
/**
* @Description: 新增了一系列String字符串处理方法
* @Author: JOKER
* @Date: 15:22 2022/12/12
* @Params: []
* @return: void
*/
@Test
public void testString(){
//判断字符串是否为空白 .isBlank();
System.out.println(" \t \n ".isBlank()); // true
//去除首尾空白(包括半角、全角空格 及 制表符、换行符) .strip()
System.out.println(" \t \n Javastack \t \n ".strip()); // "Javastack"
System.out.println(" \t \n Javastack \t \n ".trim()); //" Javastack "
//去除尾部空白 .stripTrailing()
System.out.println(" \t \n Javastack \t \n ".stripTrailing());
/*
* *************
* *******
* Javastack***
*/
//去除首部空白 .stripLeading()
System.out.println(" \t \n Javastack \t \n ".stripLeading());
/*
*Javastack ***
* ****************
*/
//复制字符串 .repeat(次数)
System.out.println("Java".repeat(5)); // "JavaJavaJavaJavaJava"
//行数统计 .lines().count()
System.out.println("A\nB\nC".lines().count()); // 3
}
710 java11新特性:Optional新增的方法
/**
* @Description: Optional 加强
* @Author: JOKER
* @Date: 15:31 2022/12/12
* @Params: []
* @return: void
*/
@Test
public void testOptional(){
//ifPresentOrElse(Consumer<?super T> action, Runnable emptyAction)
//value非空,执行参数1功能;如果value为空,执行参数2功能 JDK 9
//Optional<T> or(Supplier<?extends Optional<? extends T>> supplier)
// value非空,返回仅包含此value的Stream;否则,返回一个空的Stream JDK 9
Optional<String> op1 = Optional.of("aohda");
Optional<String> op2 = Optional.of("sada");
System.out.println(op1.or(() -> op2)); //Optional[aohda]
op1 = Optional.empty();
System.out.println(op1.or(() -> op2)); //Optional[sada]
//T orElseThrow()
//value非空,返回value;否则抛异常NoSuchElementException: No value present JDK 10
Optional<String> op3 = Optional.of("adafas");
//op3 = Optional.empty();
System.out.println(op3.orElseThrow());
//boolean isEmpty() 判断value是否为空 JDK 11
op1 = Optional.empty();
System.out.println(op1.isPresent()); //判断value是否有值
System.out.println(op1.isEmpty()); //判断value是否为空
}
711 java11新特性:局部变量类型推断的升级
/**
* @Description: 在var上添加注解的语法格式,在jdk10中是不能实现的。在JDK11中加入了这样的语法
* @Author: JOKER
* @Date: 16:02 2022/12/12
* @Params: []
* @return: void
*/
@Test
public void test(){
//错误的形式: 必须要有类型, 可以加上var
//Consumer<String> con1 = (@Deprecated t) ->System.out.println(t.toUpperCase());
//正确的形式:
//使用var的好处是在使用lambda表达式时给参数加上注解。
Consumer<String> con2 = (@Deprecated var t) ->System.out.println(t.toUpperCase());
}
712 java11新特性:HttpClient
/**
* @Description: 新特性:HttpClient替换原有的HttpURLConnection
* @Author: JOKER
* @Date: 17:02 2022/12/12
* @Params: []
* @return: void
*/
@Test
public void testHttpClient(){
try {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request =
HttpRequest.newBuilder(URI.create("https://www.baidu.com")).build();
BodyHandler<String> responseBodyHandler = BodyHandlers.ofString();
HttpResponse<String> response = client.send(request, responseBodyHandler);
String body = response.body();
System.out.println(body);
} catch (IOException e) {
throw new RuntimeException(e);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
System.out.println("*************************************************************");
try {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request =
HttpRequest.newBuilder(URI.create("https://www.baidu.com")).build();
BodyHandler<String> responseBodyHandler1 = BodyHandlers.ofString();
CompletableFuture<HttpResponse<String>> sendAsync =
client.sendAsync(request, responseBodyHandler1);
sendAsync.thenApply(t -> t.body()).thenAccept(System.out::println);
/*HttpResponse<String> response = sendAsync.get();
String body = response.body();
System.out.println(body);*/
} catch (Exception e) {
throw new RuntimeException(e);
}
}
713 java11新特性:更简化的编译运行程序
714 Java11 新特性:其他新特性
废除Nashorn javascript引擎,在后续版本准备移除掉,有需要的可以考虑使用GraalVM。
完结撒花~