总结于尚硅谷学习视频
正文
java10新特性一:局部变量的类型推断
使用场景
- 类实例化时
- 返回类型含复杂泛型结构
- 声明只使用一次的变量
不适用场景
- 初始化为null
- Lambda表达式
- 方法引用
- 为数组静态初始化
- 没有初始化的局部变量声明
- 方法的返回类型
- 方法的参数类型
- 构造器的参数类型
- 属性
- catch块
代码
Java10Test 类
package com.day0403_1; import org.junit.jupiter.api.Test; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.URL; import java.net.URLConnection; import java.util.ArrayList; import java.util.List; import java.util.function.Consumer; import java.util.function.Supplier; public class Java10Test { /* java10的新特性一:局部变量的类型推断 */ @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 url1=new URL("http://www.atguigu.com"); // var connection=new url1.openConnection(); URLConnection connection = url1.openConnection(); var reader=new BufferedReader( new InputStreamReader(connection.getInputStream())); }catch (IOException e){ e.printStackTrace(); } } //java10的新特性二:集合中新增的方法的copyOf(),用于创建只读的集合 @Test public void test5(){ //示例一 var list1= List.of("Java","Python","C"); var copy1=List.copyOf(list1); System.out.println(list1==copy1);//true //示例二 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()返回一个新集合,这个集合是只读的 } }