1:java9:(官方不支持版本)
(1):可以创建私有接口方法可以在接口下的默认方法中使用
(2):增加了try自动关闭io流
public static void main(String[] args) throws FileNotFoundException {
File source = new File("d:/demo.jpg");
File target = new File("d:/demo1.jpg");
//通过try块自动关闭资源
//final InputStream fis; 在外侧声明流对象需要添加final关键字
try (InputStream fis = new FileInputStream(source);
OutputStream fos = new FileOutputStream(target);){
byte[] bs = new byte[1024];
int len;
//利用read方法循环读取的字节数据,并进行处理
while((len = fis.read(bs)) != -1){
System.out.println(len);
//将读取到到字节数组写入到输出流
fos.write(bs,0,len);
}
} catch (IOException e) {
e.printStackTrace();
}
}
在try里面定义多个流要用分号隔开,而且在try里面定义的流变量默认加
2:Java10:(官方不支持版本)
(1)局部类型判断:使用var关键字
//局部类型推断,使用var关键字。var关键字适用于绝大多类型,比如集合
var list = new ArrayList<String>();
list.add("ABC");
var map = new LinkedHashMap<String,String>();
map.put("A","B");
但是要注意的是
var xxx=NULL;是编译错误的 因为NULL推断不出什么类型
(2):不可变集合:顾名思义,一个集合的内容不可发生变化,不可变集合不是用new关键字创建的,使用List.copyOf(list)方法;
final var list = new ArrayList<String>();//使用final关键字只是不能修改地址,而无法阻止在集合中添加元素
//使用copyOf()方法
List<String> copyList = List.copyOf(list);
copyList.add("A");//运行时会报错,抛出异常。因为该集合类型是不可变集合
3:JDK11提供了新的String方法
-
String str = "www.imooc.com";
-
boolean isblank =str.isBlank(); //判断字符串是空白,可以都是空格,长度不为0,如果长度为0,判断也是为true
-
boolean isempty = str.isEmpty();//判断字符串是否为空,长度为0
-
String result1 = str.strip();//去除首尾空白(包括半角和全角空白,而trim()只能去掉半角空白)
-
String result2 = str.stripTrailing();//去除尾部空白
-
String result3 = str.stripLeading();//去除首部空白
-
String copyStr = str.repeat(2);//复制几遍字符串
-
long lineCount = str.lines().count();//行数统计
4:Java12:switch case 优化
老版本我就不多说了 看一下新版本吧
//新版switch方法,简便了许多
public void newSwitch(){
int day = new Random().nextInt(7):
int result = switch (day) {
case 0,1,2 -> 88;
case 3 -> 99;
case 4,5 -> 101;
case 6 -> 120;
default -> -1;
};
System.out.println(result);
}
注意此时在switch的case下 没有了break
5:Java13 :增加文本快特性 (所见即所得)
String str2 = """
<html>
<head>
</head>
<body>
我是正文
</body>
</html>
""";//格式特点是文本块用"""包裹,输入的是什么文本,输出的就是什么文本,所见即所得;