- 資訊首頁(yè) > 開(kāi)發(fā)技術(shù) >
- java語(yǔ)法糖之jdk迭代的新特性匯總
是由英國計算機科學(xué)家彼得·約翰·蘭達(Peter J. Landin)發(fā)明的一個(gè)術(shù)語(yǔ),指計算機語(yǔ)言中添加的某種語(yǔ)法,這種語(yǔ)法對語(yǔ)言的功能并沒(méi)有影響,但是更方便程序員使用。通常來(lái)說(shuō)使用語(yǔ)法糖能夠增加程序的可讀性,從而減少程序代碼出錯的機會(huì )。
功能和傳統的fori相似
代碼樣例
public class Test { public static void main(String[] args) { int[] num = new int[10]; for (int i = 0; i < 10; i++) { num[i] = i; } //舊版本 for (int i = 0; i < num.length; i++) { System.out.print(num[i]+" "); } System.out.println(); //新版本 for (int i:num) { System.out.print(num[i]+" "); } } }
輸出對比
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9
特性
變量的取值只在一個(gè)有限的集合里面
代碼樣例
public class Test { public static void main(String[] args) { enum Size{ SMALL,MEDIUM,LARGE; } Size s1 = Size.SMALL; Size s2 = Size.MEDIUM; Size s3 = Size.LARGE; Size s4 = Size.SMALL; System.out.println(s1==s4); System.out.println(s3==s4); } }
輸出樣例
true
false
特性
普通函數的形參列表是固定個(gè)數/類(lèi)型/順序
JDK5.0提供了不定項參數(可變參數)功能
代碼樣例
public class Test { public static void main(String[] args) { test("aaa"); test("aaa","bbb","ccc"); } public static void test(String... args){ System.out.println(args.length); for (String arg:args) { System.out.println(arg); } } }
輸出樣例
1
aaa
3
aaa
bbb
ccc
特性
import導入程序所需要的類(lèi)
import static導入一個(gè)類(lèi)的靜態(tài)方法和靜態(tài)常量(JDK5.0引入)
代碼樣例
import static java.lang.Math.pow; import static java.lang.Math.sqrt; import static java.lang.System.out; public class Test { public static void main(String[] args) { int a=3,b=4,c=0; //靜態(tài)引入 c = (int) sqrt(pow(a,2)+pow(b,2)); //原本用法 c = (int) Math.sqrt(Math.pow(a,2)+Math.pow(b,2)); //靜態(tài)引入 out.println(c); //原本用法 System.out.println(c); } }
輸出樣例
5
5
特性
在java中,基本類(lèi)型放在棧里面,對象則是在堆里開(kāi)辟了內存空間,把對象的引用存入棧里面,基本類(lèi)型可以包含在對象里面,所以形象的形容為裝箱
從JDK5.0開(kāi)始引入,簡(jiǎn)化了基本類(lèi)型和對象轉化的寫(xiě)法
基本類(lèi)型:boolean/byte/char/int/short/long/float/double
對象:Boolean/Byte/Character/Integer/Short/Long/Float/Double
代碼樣例
public class Test { public static void main(String[] args) { //自動(dòng)裝箱 Integer obj1 = 5; //原始用法 Integer obj2 = Integer.valueOf(5); //自動(dòng)拆箱 int a1 = obj1; //原始用法 int a2 = obj2.intValue(); System.out.println(obj1); System.out.println(a1); System.out.println(obj2); System.out.println(a2); } }
輸出樣例
5
5
5
5
特性
多個(gè)異常并列在一個(gè)catch中
從JDK7.0Y引入,簡(jiǎn)化寫(xiě)法
代碼樣例
import java.io.IOException; import java.sql.SQLException; public class Test { public static void main(String[] args) { //舊版本 try { test(); } catch (IOException ex){ //異常處理 } catch (SQLException ex){ //異常處理 } //新版本 try { test(); } catch (IOException | SQLException ex){ //異常處理 } } private static void test() { } }
特性
從JDK7.0開(kāi)始引入
整數類(lèi)型可以用二進(jìn)制進(jìn)行賦值
代碼樣例
public class Test { public static void main(String[] args) { byte a1 = (byte) 0b00100001; short a2 = (short) 0b10101010101; int a3 = 0b101; long a4 = 0b101010101011011011010101011L; System.out.println(a1); System.out.println(a2); System.out.println(a3); System.out.println(a4); } }
輸出樣例
33
1365
5
89503403
特性
從JDK7.0開(kāi)始引入
在數字字面量中使用下劃線(xiàn)
代碼樣例
public class Test { public static void main(String[] args) { //二進(jìn)制,0b開(kāi)頭 int a1 = 0b0100_1011_0001; //八進(jìn)制,0開(kāi)頭 int a2 = 02_014; int a3 = 123__45; //十六進(jìn)制,0x開(kāi)頭 int a4 = 0x7_567; float a5 = 3.56_78f; System.out.println(a1); System.out.println(a2); System.out.println(a3); System.out.println(a4); System.out.println(a5); } }
輸出樣例
1201
1036
12345
30055
3.5678
特性
java最初的設計中,接口的方法都是沒(méi)有實(shí)現的公開(kāi)的
JDK8.0推出接口的默認方法/靜態(tài)方法(都帶實(shí)現的),為L(cháng)ambda表達式提供支持
代碼樣例
public class Test { public interface Animal{ public void move(); } public interface NewAnimal{ public default void move(){ System.out.println("I can move"); }; } }
特性
JDK8.0推出帶實(shí)現的靜態(tài)方法
代碼樣例
public class Test { public interface StaticAnimal{ public static void move(){ System.out.println("I can move"); } } public interface StaticLandAnimal extends StaticAnimal{ //繼承不到StaticAnimal的move方法 } public static void main(String[] args) { //正確引用 StaticAnimal.move(); //錯誤引用 StaticLandAnimal.move(); new StaticAnimal().move(); } }
特性
JDK9.0推出接口的私有方法
代碼樣例
public class Test { public interface StaticAnimal{ private void move(){ System.out.println("I can move"); } } public interface StaticLandAnimal extends StaticAnimal{ //繼承不到StaticAnimal的move方法 } public static void main(String[] args) { //錯誤引用 StaticAnimal.move(); StaticLandAnimal.move(); new StaticAnimal().move(); } }
特性
程序如果打開(kāi)外部資源,那么使用后必須正確關(guān)閉
考慮異常因素,java提供try-catch-finally進(jìn)行保證
JDK7.0提供try-with-resour,比try-catch-finally更加方便
代碼樣例
public class Test implements AutoCloseable { private int age = 18; @Override public void close() throws Exception { System.out.println("關(guān)閉成功"); } public static void main(String[] args) { try(Test11 OpenResource = new Test()){ System.out.println(OpenResource.age); } catch (Exception e) { e.printStackTrace(); } } }
輸出樣例
18
關(guān)閉成功
特性
JDK8及以前,ResourceBundle默認以ISO-8859-1方式加載文件
JDK9及以后,ResourceBundle默認以UTF-8方式加載文件
java以前一直是一種強類(lèi)型的語(yǔ)言
每個(gè)變量在定義時(shí)候就確定了類(lèi)型
JDK10推出了var:局部變量推斷
代碼樣例
public class Test { public static void main(String[] args) { var a1 = 5; var a2 = 0.025f; var a3 = "abc"; int b1 = 5; float b2 = 0.025f; String b3 = "abc"; System.out.println(a1==b1); System.out.println(a2==b2); System.out.println(a3==b3); } }
輸出樣例
true
true
true
特性
JDK12推出
代碼樣例
public class Test { public static void main(String[] args) { String month = null; int result; switch (month){ case "Jan","Mar","July","Aug","Oct","Dec" -> result = 31; case "Apr","June","Sep","Nov" -> result = 30; case "Feb" -> result = 28; default -> result = -1; } } }
到此這篇關(guān)于java語(yǔ)法糖之jdk迭代新特性的文章就介紹到這了,更多相關(guān)jdk迭代新特性?xún)热菡埶阉髂_本之家以前的文章或繼續瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自互聯(lián)網(wǎng)轉載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權請聯(lián)系QQ:712375056 進(jìn)行舉報,并提供相關(guān)證據,一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容。
Copyright ? 2009-2021 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 珠海市特網(wǎng)科技有限公司 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站