zoukankan      html  css  js  c++  java
  • JDK9新特性

    模块化

    包级别上面加一个模块的级别
    根目录下加一个module描述文件,可以指定export模块下面的包
    其他模块在module描述文件中import指定的包,才可以引用该包下面的类

    jShell

    和Python等其他语言一样的命令行工具,可以在互动命令行中写代码

    多版本兼容jar

    同一个类,一个用老版本的API写,一个用新版本的API写,进行特殊打包后
    老版本JDK的系统引入该jar包调用时,用的是老版本API写的类
    新版本JDK的系统引入该jar包调用时,用的是新版本API写的类

    接口可以定义私有方法

    Java8中可以定义默认方法和静态方法,假设这几个方法有些逻辑是相同的,且这段逻辑是不希望对外暴露的,就可以使用接口的私有方法进行封装

    钻石操作符使用升级

    JDK7后:钻石操作符里的类型可以不写

    List a = new ArrayList<>();
    

    JDK9:新增一种写法

    List a = new ArrayList<>(){
    // 相当于new了一个ArrayList匿名子类
    };
    

    资源try的新写法

    JDK7后:

    try(InputStreamReader reader = new InputStreamReader(System.in)){
        //读取数据
    } catch(IOException e){
        e.printStackTrace;
    }
    

    JDK9后:

    InputStreamReader reader = new InputStreamReader(System.in);
    OutputSteamWriter writer = new OutputStreamWriter(System.out);
    try(reader;writer){
        //reader和writer是不能再赋值的,隐式final
    	
        //读取数据
    } catch(IOException e){
        e.printStackTrace;
    }
    

    下划线

    JDK9中标识符不能为 _
    例子如下:

    String _ = "444";//JDK9之后这样的变量名是不允许的
    

    String底层存储结构由char数组改为byte数组+encodingFlag,StringBuffer和StringBuilder也是

    创建只读集合

        //jdk 8 以及之前:创建一个只读特点的集合
        @Test
        public void test1(){
            List<String> list = new ArrayList<>();
            list.add("Tom");
            list.add("Jerry");
            list.add("Lilei");
            list.add("HanMeimei");
    
            //调用Collections中的方法,将list变为只读的
            List<String> newList = Collections.unmodifiableList(list);
    
    //        newList.add("Tim");//不能执行,否则报异常
    
            //遍历:jdk 8
            newList.forEach(System.out::println);
    
        }
    
        //jdk 8 以及之前:创建一个只读特点的集合
        @Test
        public void test2(){
            //List:
            List<Integer> list = Collections.unmodifiableList(Arrays.asList(1, 2, 3));
    
    //        list.add(4);
    
            //Set:
            Set<Integer> set = Collections.unmodifiableSet(new HashSet<>(Arrays.asList(1, 2, 3)));
    
    //        set.add(4);
    
    //        set.forEach(System.out::println);
    
            //Map:
            Map m = new HashMap<>(); 
            m.put("Tom", 78);
            Map<Object, Object> map = Collections.unmodifiableMap(m);
    
            map.forEach((k,v) -> System.out.println(k + ":" + v));
        }
    
        //jdk 9 中:创建一个只读特点的集合
        @Test
        public void test3(){
            //List:
            List<Integer> list = List.of(1, 2, 3);
    
    //        list.add(4);
    
            list.forEach(System.out::println);
    
            //Set:
            Set<Integer> set = Set.of(2, 3, 4);
    
    //        set.add(6);
    
            //Map:
            //创建只读集合的方式一:
            Map<String, Integer> map = Map.of("Tom", 23, "Jerry", 22, "Lilei", 12, "HanMeimei", 18);
    
    //        map.put("Tim",33);
    
            //创建只读集合的方式二:
            Map<String, Integer> map1 = Map.ofEntries(Map.entry("Tom", 23), Map.entry("Jerry", 21));
    
    //        map1.put("Tim",33);
    
            System.out.println(map1);
    
        }
    
    

    Stream新方法

        //jdk 9 中针对于Stream 新添加了4个方法
    
        //1.takeWhile()
        @Test
        public void test1(){
            List<Integer> list = Arrays.asList(45,56,33,77,44,98,76,78,33);
    
            // 输出第一个不满足之前的 所有符合的,不同于filter
            list.stream().takeWhile(x -> x < 70).forEach(System.out::println);
            System.out.println();
        }
    
        //2.dropWhile():与 takeWhile() 整好相反
        @Test
        public void test2(){
            List<Integer> list = Arrays.asList(45,56,33,77,44,98,76,78,33);
    
            Stream<Integer> stream = list.stream();
    
            stream.dropWhile(x -> x < 70).forEach(System.out::println);
    
            System.out.println();
    
            List<Integer> list1 = Arrays.asList(1,2,3,4,5,6,7,8);
            list1.stream().dropWhile(x -> x < 5).forEach(System.out::println);
        }
    
        //3.ofNullable(T t): t可以为null
        @Test
        public void test3(){
    
            Stream<Integer> stream1 = Stream.of(1, 2, 3, null);
            stream1.forEach(System.out::println);
    
            System.out.println();
    
            //如果只有单个元素,此元素不能为null.否则报NullPointerException
    //        Stream<Object> stream2 = Stream.of(null);
    
            //jdk 9 :新增ofNullable(T t):
            Stream<String> stream3 = Stream.ofNullable("Tom");
            System.out.println(stream3.count());//1
    
            Stream<String> stream4 = Stream.ofNullable(null);
            System.out.println(stream4.count());//0
    
        }
    
        //4.iterator()重载的方法
        @Test
        public void test4(){
            //复习:Stream的实例化:①通过集合的stream() ②通过数组工具类:Arrays ③ Stream中静态方法:of() ④iterator() / generate()
    
            Stream.iterate(0,x -> x + 1).limit(10).forEach(System.out::println);
    
            System.out.println();
            
    	// 新增新的iterate重载方法,下面的例子可以替代limit方法的作用
            Stream.iterate(0,x -> x < 10,x -> x + 1).forEach(System.out::println);
        }
    

    Optional新增stream方法

        //Optional类中提供了转换为Stream的方法:stream()
        @Test
        public void test1() {
    
            List<String> list = new ArrayList<>();
            list.add("Tom");
            list.add("Jerry");
            list.add("Tim");
    
            Optional<List<String>> optional = Optional.ofNullable(list);
    
            Stream<String> stream = optional.stream().flatMap(x -> x.stream());
    //        System.out.println(stream.count());
    
            stream.forEach(System.out::println);
    
    
        }
    

    多分辨率图像API

    新的HttpClient,且支持HTTP/2

    package com.atguigu.java1;
    
    import jdk.incubator.http.HttpClient;
    import jdk.incubator.http.HttpRequest;
    import jdk.incubator.http.HttpResponse;
    
    import java.io.IOException;
    import java.net.URI;
    
    /**
     * Created by songhongkang on 2017/12/29 0029.
     */
    public class HttpClientTest {
    
        public static void main(String[] args) {
            //jdk 9 中 使用 HttpClient替换原有的HttpURLConnection
            try {
                HttpClient client = HttpClient.newHttpClient();
    
                HttpRequest req = HttpRequest.newBuilder(URI.create("http://www.atguigu.com")).GET().build();
    
                HttpResponse<String> response = null;
                response = client.send(req, HttpResponse.BodyHandler.asString());
                System.out.println(response.statusCode());
                System.out.println(response.version().name());
                System.out.println(response.body());
    
            } catch (IOException e) {
                e.printStackTrace();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
    
    
  • 相关阅读:
    android IntentService生命周期问题
    日志
    python for android : BeautifulSoup 有 bug
    光电耦合器简单介绍以及作用
    cocos2dx 3.1从零学习(五)——动画
    openssl之EVP系列之9---EVP_Digest系列函数的一个样例
    html5 SVG
    CSS选择器
    ISCC2014-reverse
    哇塞!HTML5 实现的雨滴效果 CSS发抖
  • 原文地址:https://www.cnblogs.com/buxiu/p/15154787.html
Copyright © 2011-2022 走看看