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个方法

java中transport对象 java中transferto方法_java

 

/**
 * @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新特性的概述

java中transport对象 java中transferto方法_新特性_02

 

 

706 java10新特性:局部变量类型推断

Local-Variable Type Inference 局部变量类型推断

 

java中transport对象 java中transferto方法_System_03

 

java中transport对象 java中transferto方法_System_04

 

 

/**
 * @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);
    }
}

java中transport对象 java中transferto方法_新特性_05

 

 

不适用以下 的结构中 :

 情况1:没有初始化的局部变量声明

 情况2:方法的返回类型

 情况3:方法的参数类型

 情况4:构造器的参数类型

 情况5:属性

 情况6:catch块

java中transport对象 java中transferto方法_java中transport对象_06

 

java中transport对象 java中transferto方法_java_07

 

 

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 增强提案)

 

java中transport对象 java中transferto方法_新特性_08

 

java中transport对象 java中transferto方法_java_09

 

 

 

 

官网公开的 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新增的方法

java中transport对象 java中transferto方法_新特性_10

 

 

/**
 * @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

java中transport对象 java中transferto方法_java中transport对象_11

 

/**
 * @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新特性:更简化的编译运行程序

java中transport对象 java中transferto方法_java中transport对象_12

 

 

714 Java11 新特性:其他新特性

废除Nashorn javascript引擎,在后续版本准备移除掉,有需要的可以考虑使用GraalVM。

 

java中transport对象 java中transferto方法_java中transport对象_13

 

java中transport对象 java中transferto方法_java中transport对象_14

 

java中transport对象 java中transferto方法_Java_15

 

java中transport对象 java中transferto方法_Java_16

 

java中transport对象 java中transferto方法_java中transport对象_17

 完结撒花~