java9新特性


java9

一、模块化系统

在每个模块src目录下新建module-info.java,目录如下:
在这里插入图片描述
导出包代码如下:

/**
 * @author liuxun
 * @create 2022-02-14 6:45
 * @description
 */module testjava9 {
     exports com.liuxun.bean;
}

导入包代码如下:

/**
 * @author liuxun
 * @create 2022-02-14 6:44
 * @description
 */module java9test {
     requires testjava9;
}

二、REPL工具:jshell

1.配置好环境变量,在终端输入jshel命令。即可在终端编写代码

/help 打印帮助信息
/list 打印代码信息
/edit 编辑代码
/exit 退出

三、接口中的私有方法

/**
 * @author 
 * @create 2022-02-14 1:50
 * @description
 */
import com.liuxun.bean.Person;
import org.junit.Test;

public class Java9test {
    @Test
    public void privateMethodTest(){
        PrivateMethod.method4();
        MethodExtend methodExtend = new MethodExtend();
        methodExtend.method2();
        methodExtend.method1();
    }

}
interface PrivateMethod{
//    实列方法
     void method1();
//    默认方法中可以有方法体

    default void method2(){
        System.out.println("默认方法");
        method3();
    }
//    接口中的私有方法
    private void  method3(){
        System.out.println("私有方法");
    }
    static void method4(){
        System.out.println("静态方法");
    }
}
class MethodExtend implements PrivateMethod{
    public void method1(){
        System.out.println("实列方法");
    }
}

四、砖石操作符

钻石操作符不能在你们内部类中使用;

五、try 操作升级

/**
 * @author liuxun
 * @create 2022-02-14 1:50
 * @description
 */
import com.liuxun.bean.Person;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStreamReader;

public class Java9test {
    @Test
    public void privateMethodTest(){
        //java 8进行资源自动关闭资源且资源的初始化必须在try()中
//        try (InputStreamReader reader = new InputStreamReader(System.in)){
//            char[] cbuf = new char[20];
//            int len;
//            if((len = reader.read(cbuf))!= -1){
//                String s = new String(cbuf, 0, len);
//            }
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//        java9 不需要将自动关闭的资源放在try()中,此时的资源属性是final,不能修改
        InputStreamReader reader = new InputStreamReader(System.in);
        InputStreamReader reader1 = new InputStreamReader(System.in);

        try (reader;reader1){
            char[] cbuf = new char[20];
            int len;
            if((len = reader.read(cbuf))!= -1){
                String s = new String(cbuf, 0, len);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}


六 String底层结构变更

String底层结构从char[] 变更为byte[],目的是为了节约资源。

七、创建制只读集合

List<String> namesList = new ArrayList<>();
        namesList.add("joe");
        namesList.add("Bob");
        namesList.add("joe");
        namesList.add("bill");
        //创建只读集合
        namesList = Collections.unmodifiableList(namesList);
        //不可再添加,运行时会报错
        namesList.add("fdf");
        System.out.println(namesList);

八、InputStream中的 transferTo新方法

ClassLoader c1 = this.getClass().getClassLoader();
        try(InputStream is = c1.getResourceAsStream("hello.txt")){
            FileOutputStream os = new FileOutputStream("src/hello.txt");
            is.transferTo(os);
        }catch (IOException e){
            e.printStackTrace();
        }

九、StreamApi 新增的方法

List<Integer> list = Arrays.asList(23, 42, 32, 34, 76, 45, 9, 34, 983, 54);
//        takeWhile 返回从开头开始的按照指定规则尽量多的元素
//        list.stream().takeWhile(x-> x < 60).forEach(System.out::println);
        
        //dropwhile 与takewhile 相反,返回剩余的元素。
//        list.stream().takeWhile(x-> x < 60).forEach(System.out::println);
        //java8
        Stream.iterate(0,x->x+1);
        //java9 相当于Stream.iterate(0,x->x+1).limit(100);
        Stream.iterate(0,x-> x<100,x->x+1);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值