Java9,10,11新特性
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);