JDK新特性之 JDK10

前言

2018年3 月 21 日,Oracle 官方宣布 Java 10 正式发布

局部变量类型推断

public class Test01 {
    public static void main(String[] args) {
        /**
         * var是保留类型,不是关键字,可以当做变量名
         * 只能用来表示局部变量
         */
        var var="hello world";
        var person=new Person();
        var list= List.of(1,2,3,4,5);
        //for 循环中使用var
        for (var integer : list) { System.out.print(integer+","); }
        person.setName("侯征");
        person.setAge(25);
        System.out.println(var);
        System.out.println(person);
        // var a=null; //var无法推断null,所以null不能用var表示
    }
}

垃圾收集器优化

copyof方法

public class Test02 {
    public static void main(String[] args) {
        //copy 集合类新增静态方法,按照其迭代顺序返回一个不可变的集合
        // copy接受一个集合,of接受元素数组
        var list = List.of(1, 2, 3);
        var copy = List.copyOf(list);
        //copy.add(4); 报错,不可变
        copy.forEach(x-> System.out.println(x)); //和list顺序一致
        var map = Map.of("name", "侯征", "age", 25);
        var stringMap = Map.copyOf(map);
    }
}

Scanner新构造方法

public class Test06 {
    public static void main(String[] args) throws IOException {
        //Scanner 新增三个构造器,都需要Charset参数
        //指定编码
        var scanner = new Scanner(new FileInputStream(new File("out.txt")),"gbk");
        while(scanner.hasNext()){
            System.out.println(scanner.nextLine());
        }
    }
}

ByteArrayOutputStream下的toString方法

public class Test03 {
    public static void main(String[] args) throws IOException {
        //ByteArrayInputStream 内存流
        String data="鸡你太美,鸡你太美,鸡你实在是太美";
        var bais = new ByteArrayInputStream(data.getBytes("gbk"));
        var baos= new ByteArrayOutputStream();
        var bytes = new byte[1024]; //缓冲区
        //将鸡你太美读到输出流中
        while(bais.read(bytes)!=-1){
            baos.write(bytes);
        }
        //默认使用utf-8,jdk10可指定编码输出
        System.out.println(baos.toString("gbk"));
    }
}

PrintWriter构造方法

public class Test04 {
    public static void main(String[] args) throws IOException {
        //jdk10新增打印流三个构造方法,都可以指定编码
        //字符流使用了缓冲区,必须刷新或者关闭
        var writer = new PrintWriter("out.txt", "gbk");
        writer.println("鸡你太美");
        writer.println("鸡你实在是太美");
        writer.close();
    }
}

Reader类transferTo方法

public class Test05 {

    public static void main(String[] args) throws IOException {
        //transferTo: 从Reader中读取字符串,按照读取顺序写入到Writer中
        var reader = new FileReader("out.txt");
        var writer = new FileWriter("outNew.txt");
        reader.transferTo(writer);
        writer.flush(); //必须冲刷或者关闭
        writer.close();
    }
}
posted @ 2021-08-14 19:44  侯小厨  阅读(123)  评论(0编辑  收藏  举报
Fork me on Gitee