java新特性--06--JDK10
Posted 高高for 循环
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java新特性--06--JDK10相关的知识,希望对你有一定的参考价值。
Java 10
新特性一:局部变量的类型推断
适用于以下情况
- 声明局部变量时,根据所附的值,推断变量的类型
- 增强for循环
- 普通的遍历操作for循环
适用于局部变量,成员变量不适用
(因为,成员变量要默认初始化)
@Test
public void test1() {
//1.声明变量时,根据所附的值,推断变量的类型
var num = 10;
var list = new ArrayList<Integer>();
list.add(123);
//2.遍历操作
for (var i : list) {
System.out.println(i);
System.out.println(i.getClass());
}
//3.普通的遍历操作
for (var i = 0; i < 100; i++) {
System.out.println(i);
}
}
不适用于情况
@Test
public void test2() {
1.局部变量不赋值,就不能实现类型推断
// var num ;
2.lambda表示式中,左边的函数式接口不能声明为var
// Supplier<Double> sup = () -> Math.random();
// var sup = () -> Math.random();
3.方法引用中,左边的函数式接口不能声明为var
// Consumer<String> con = System.out::println;
// var con = System.out::println;
4.数组的静态初始化中,注意如下的情况也不可以
int[] arr = {1, 2, 3, 4};
// var arr = {1,2,3,4};
}
@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;
工作原理
@Test
public void test4() {
try {
var url = new URL("http://www.atguigu.com");
var connection = url.openConnection();
var reader = new BufferedReader(
new InputStreamReader(connection.getInputStream()));
} catch (IOException e) {
e.printStackTrace();
}
}
新特性二:集合中新增的copyOf(),用于创建一个只读的集合
案例:
//java10的新特性二:集合中新增的copyOf(),用于创建一个只读的集合
@Test
public void test5(){
//示例1:
var list1 = List.of("Java", "Python", "C");
var copy1 = List.copyOf(list1);
System.out.println(list1 == copy1); // true
//示例2:
var list2 = new ArrayList<String>();
list2.add("aaa");
var copy2 = List.copyOf(list2);
System.out.println(list2 == copy2); // false
//示例1和2代码基本一致,为什么一个为true,一个为false?
//结论:copyOf(Xxx coll):如果参数coll本身就是一个只读集合,则copyOf()返回值即为当前的coll
//如果参数coll不是一个只读集合,则copyOf()返回一个新的集合,这个集合是只读的。
}
示例1和2代码基本一致,为什么一个为true,一个为false?
结论:
- copyOf(Xxx coll):如果参数coll本身就是一个只读集合,则copyOf()返回值即为当前的coll
- 如果参数coll不是一个只读集合,则copyOf()返回一个新的集合,这个集合是只读的。
以上是关于java新特性--06--JDK10的主要内容,如果未能解决你的问题,请参考以下文章
Java 10 的 10 个新特性,将彻底改变你写代码的方式!
译ECMAScript 2016, 2017, 2018 新特性之必读篇