文章插圖

文章插圖
現在 Java 11發布已有一段時間了,是時候慢慢來學習一些Java新版本中的新功能特性了 。
今天要實戰講解的的是 在Java 10 中添加的最重要的特性:局部變量類型推斷,大家都知道是 var 關鍵字,但具體怎么使用,及要注意什么要點呢?
我們通過幾個例子來講解局部變量類型推斷這個新特性!
什么是局部變量類型推斷
var javastack = “javastack”;
System.out.println(javastack);
大家看出來了,局部變量類型推斷就是左邊的類型直接使用 var 定義,而不用寫具體的類型,編譯器能根據右邊的表達式自動推斷類型,如上面的 String。
var javastack = “javastack”;
就等于:
String javastack = “javastack”;
局部變量類型推斷使用示例
既然叫局部變量類型推斷,以只能用在局部變量中,下面給出更多使用示例 。
1、字面量定義局部變量
private static void testVar() {
var javastack = “javastack”;
System.out.println(javastack);
}
2、接收方法返回值定義局部變量
private static void testMethod() {
var javastack = getJavastack();
System.out.println(javastack);
}
public static String getJavastack() {
return “javastack”;
}
3、循環中定義局部變量
private static void testLoop() {
for (var i = 0; i < 3; i++) {
for (var m = 10; m < 15; m++) {
System.out.println(i + m);
}
}
}
4、泛型結合局部變量
private static void testGeneric() {
// 表達式1
List<String> list1 = new ArrayList<>();
list1.add(“javastack”);
// 表達式2
var list2 = new ArrayList<>();
list2.add(2018);
// 表達式3
var list3 = new ArrayList<String>();
list3.add(“javastack”);
}
表達式1后面 <> 里面 jdk 1.7+開始是不用帶具體類型的,在接口中指明就行了 。
表達式2中如果使用 var 的話, <> 里面默認會是 Object 的,所以可以添加任意類型 。
表達式3中在 <> 強制使用了 String 來指定泛型 。
局部變量類型推斷不能用在以下場景
1、類成員變量類型
// 編譯報錯
private var javastack = “牛旦教育IT課堂;
2、方法返回類型
/**
* 編譯報錯
* @return
*/
public static var getJavastack(){
return “牛旦教育IT課堂”;
}
3、Lambda 表達式
private static void testLambda() {
Runnable runnable = () -> System.out.println(“javastack”);
// 編譯報錯
// var runnable = () -> System.out.println(“javastack”);
}
以上 3 種場景是肯定不能使用 var 的,其他場合有待驗證 。
局部變量類型推斷優缺點
優點:簡化代碼
CopyOnWriteArrayList list1 = new CopyOnWriteArrayList();
ConcurrentModificationException cme1 = new ConcurrentModificationException();
DefaultServiceUnavailableRetryStrategy strategy1 = new
DefaultServiceUnavailableRetryStrategy();
var list2 = new CopyOnWriteArrayList<>();
var cme2 = new ConcurrentModificationException();
var strategy2 = new DefaultServiceUnavailableRetryStrategy();
從以上代碼可以看出,很長的定義類型會顯得代碼很冗長,使用 var 大大簡化了代碼編寫,同時類型統一顯得代碼很對齊 。
缺點:掩蓋類型
var token = new JsonParserDelegate(parser).currentToken();
看以上代碼,不進去看返回結果類型,誰知道返回的類型是什么?所以這種情況最好別使用 var,而使用具體的抽象類、接口或者實例類型 。
var關鍵字原理
var其實就是 Java 10 增加的一種語法糖而已,在編譯期間會自動推斷實際類型,其編譯后的字節碼和實際類型一致,如以下例子所示 。
private static void testByteCode() {
String javastack1 = “javastack”;
var javastack2 = “javastack”;
}
編譯成字節碼后:
private static testByteCode()V
L0
LINENUMBER 22 L0
LDC “javastack”
ASTORE 0
L1
LINENUMBER 23 L1
LDC “javastack”
ASTORE 1
L2
LINENUMBER 24 L2
RETURN
L3
LOCALVARIABLE javastack1 Ljava/lang/String; L1 L3 0
LOCALVARIABLE javastack2 Ljava/lang/String; L2 L3 1
MAXSTACK = 1
MAXLOCALS = 2
可以看出 javastack1 和 javastack2 都是虛擬機所認識的的本地變量類型: java.lang.String,虛擬機并不認識 var, 所以 var 并不神奇 。
【java查看變量數據類型 java 查看類型】OK,本次關于 Java 10 中新添功能,即局部變量類型推斷實戰文章就到這里了,后續帶來更多的 Java 新版的特性功能實戰方面的文章 。
- 怎么看qq空間加密了的相冊 怎么查看qq空間的加密相冊
- 手機淘寶怎么看會員卡 怎么查看淘寶店鋪會員卡
- 高德地圖怎么查看軌跡記錄 高德地圖怎么軌跡記錄
- 電腦系統操作流程 電腦系統操作日志查看
- JAVA添加環境變量 java怎么搭建環境變量
- java對象轉byte數組 java int數組轉byte數組
- 查看本機ip地址的兩種方法 如何查看本機的ip地址查詢
- adsl賬號密碼在哪里可以查看 adsl賬戶密碼查詢
- java項目案例分析pdf java項目開發案例經典
- linux 查看端口狀態 linux命令查看端口狀態
