Java10新特性
局部变量类型推断
适用于
不适用于
@Test
public void test3() {
// 情况1:没有初始化的局部变量声明
// var s = null;
// 情况6:catch块
// try{
//
// }catch(var e){
// e.printStackTrace();
// }
}
//情况2:方法的返回类型
// public var method1(){
//
return 0;
// }
// 情况3:方法的参数类型
// public void method2(var num){
//
// }
//情况4:构造器的参数类型
// public Java10Test(var i){
//
// }
//情况5:属性
// var num;
新创建不可变集合的方法
从源码分析,可以看出copyOf方法会先判断来源集合是不是AbstractImmutableList 类型的,如果是,就直接返回,如果不是,则调用of创建一个新的集合。
示例2因为用的new 创建的集合,不属于不可变 AbstractImmutableList 类的子类,所以 copyOf 方法又创建了一个新的实例,所以为false。
注意:使用of和copyOf创建的集合为不可变集合,不能进行添加、删除、替换、排序等操作,不然会报 java.lang.UnsupportedOperationException 异常。
上面演示了 List 的 of 和 copyOf 方法,Set 和 Map 接口都有。
Java11新特性
新增字符串方法
@Test
public void test1(){
// isBlank():判断字符串是否为空白
System.out.println(" \t \t \n ".isBlank());
// strip():去除首尾空白
System.out.println("-----" + " \t abc \t \n ".strip() + "-------");
System.out.println("-----" + " \t abc \t \n ".trim() + "-------");
// stripTrailing():去除尾部空格
System.out.println("-----" + " \t abc \t \n ".stripTrailing() + "-------");
// stripLeading():去除首部空格
System.out.println("-----" + " \t abc \t \n ".stripLeading() + "-------");
// repeat(int count):复制字符串
String str1 = "abc";
String str2 = str1.repeat(5);
System.out.println(str2);
// lines().count():行数统计
String str3 = "abc\ndef\ng";
System.out.println(str3.lines().count());
}
Optional类新增方法
@Test
public void test2(){
var op = Optional.empty();
System.out.println(op.isPresent());//判断内部的value是否存在
System.out.println(op.isEmpty());//判断内部的value是否为空
op = Optional.of("abc");
//orElseThrow():value非空,返回value;否则抛异常NoSuchElementException
var obj = op.orElseThrow();
System.out.println(obj);
Optional<String> op1 = Optional.of("hello");
// op = Optional.empty();
//or:value非空,返回对应的Optional;value为空,返回形参封装的Optional
Optional<Object> op2 = op.or(() -> op1);
System.out.println(op2);//
}
局部变量类型推断升级
//java11新特性三:局部变量类型推断的升级
@Test
public void test3(){
//错误的形式: 必须要有类型, 可以加上var
// Consumer<String> con1 = (@Deprecated t) -> System.out.println(t.toUpperCase());
// 正确的形式:
// 使用var的好处是在使用lambda表达式时给参数加上注解。
Consumer<String> con2 = (@Deprecated var t) -> System.out.println(t.toUpperCase());
}