1. 介紹
JAVA作為使用的主力語言,掌握下其歷史發(fā)展也是有必要的。看看從JAVA5開始到現(xiàn)在的JAVA9有哪些變化。借此機(jī)會,也可以看看哪些特性我們是已經(jīng)用到的,哪些是還沒有用到的。
我們在IDEA里面也可以看到language level里面的信息,這里也大致寫了下各個版本JDK的新特性。
簡單概括下就是:
JAVA1.3:普通的原始的JAVA,基本語法相信大家都見過了
JAVA1.4:assert關(guān)鍵字
JAVA5:枚舉類型、泛型、自動拆裝箱
JAVA6: @Override注解
JAVA7: <>符號、ARM支持、支持多catch
JAVA8:Lamda表達(dá)式,類型注解等
JAVA9: 模塊化、接口中的私有方法等
下面我們更加詳細(xì)的分析下各個版本有哪些新特性。
2. JAVA5新特性
2.1 泛型 Generics
引用泛型之后,允許指定集合里元素的類型,免去了強(qiáng)制類型轉(zhuǎn)換,并且能在編譯時刻進(jìn)行類型檢查的好處。Parameterized Type作為參數(shù)和返回值,Generic是vararg、annotation、enumeration、collection的基石。
泛型可以帶來如下的好處總結(jié)如下:
類型安全:拋棄List、Map,使用List 、Map 給它們添加元素或者使用Iterator 遍歷時,編譯期就可以給你檢查出類型錯誤
方法參數(shù)和返回值加上了Type: 拋棄List、Map,使用List 、Map
不需要類型轉(zhuǎn)換:List list=new ArrayList ();
類型通配符“?”: 假設(shè)一個打印List 中元素的方法printList,我們希望任何類型T的List 都可以被打印
2.2 枚舉類型 引入了枚舉類型
2.3 自動裝箱拆箱(自動類型包裝和解包)autoboxing & unboxing 簡單地說是類型自動轉(zhuǎn)換。 自動裝包:基本類型自動轉(zhuǎn)為包裝類(int ——Integer) 自動拆包:包裝類自動轉(zhuǎn)為基本類型(Integer——int)
2.4 可變參數(shù)varargs(varargs number of arguments) 參數(shù)類型相同時,把重載函數(shù)合并到一起了。 如:
publicvoidtest(object... objs){for(Object obj:objs){ System.out.println(obj); }}
2.5 Annotations(重要) 它是java中的metadata(注釋)
注解在JAVA5中就引入了。這是非常重要的特性。現(xiàn)在注解的應(yīng)用已經(jīng)隨處可見。不過JAVA5的注解還不成熟,沒法自定義注解。
2.6 新的迭代語句
for(intn:numbers){//process}
2.7 靜態(tài)導(dǎo)入(import static )
導(dǎo)入靜態(tài)對象,可以省略些代碼。不過這個也不常用。、
importstaticjava.lang.System.out;//導(dǎo)入java.lang包下的System類的靜態(tài)方法out;publicclassHelloWorld{publicstaticvoidmain(String[] args){out.print("Hello World!");//既是在這里不用再寫成System.out.println("Hello World!")了,因?yàn)橐呀?jīng)導(dǎo)入了這個靜態(tài)方法out。}}
2.8 新的格式化方法(java.util.Formatter)
formatter.format("Remaining account balance: $%.2f", balance);
2.9 新的線程模型和并發(fā)庫Thread Framework(重要)
最主要的就是引入了java.util.concurrent包,這個都是需要重點(diǎn)掌握的。
HashMap的替代者ConcurrentHashMap和ArrayList的替代者CopyOnWriteArrayList
在大并發(fā)量讀取時采用java.util.concurrent包里的一些類會讓大家滿意BlockingQueue、Callable、Executor、Semaphore
3. JAVA6
JAVA6當(dāng)中
3.1 Web Services
優(yōu)先支持編寫 XML web service 客戶端程序。你可以用過簡單的annotaion將你的API發(fā)布成.NET交互的web services. Mustang 添加了新的解析和 XML 在 Java object-mApping APIs中, 之前只在Java EE平臺實(shí)現(xiàn)或者Java Web Services Pack中提供.
3.2 Scripting
現(xiàn)在你可以在Java源代碼中混入JavaScript了,這對開發(fā)原型很有有用,你也可以插入自己的腳本引擎。
3.3 JDBC4.0
JAVA6將聯(lián)合綁定 Java DB (Apache Derby). JDBC 4.0 增加了許多特性例如支持XML作為SQL數(shù)據(jù)類型,更好的集成Binary Large OBjects (BLOBs) 和 Character Large OBjects (CLOBs) .
3.4 UI優(yōu)化
GUI 開發(fā)者可以有更多的技巧來使用 SwingWorker utility ,以幫助GUI應(yīng)用中的多線程。, JTable 分類和過濾,以及添加splash閃屏。
Swing擁有更好的 look-and-feel , LCD 文本呈現(xiàn), 整體GUI性能的提升。Java應(yīng)用程序可以和本地平臺更好的集成,例如訪問平臺的系統(tǒng)托盤和開始菜單。Mustang將Java插件技術(shù)和Java Web Start引擎統(tǒng)一了起來。
3.5 監(jiān)控管理增強(qiáng) 添加更多的診斷信息,綁定了不是很知名的醫(yī)生 memory-heap 分析工具Jhat 來查看內(nèi)核導(dǎo)出。
3.6 編譯API compiler API提供編程訪問javac,可以實(shí)現(xiàn)進(jìn)程內(nèi)編譯,動態(tài)產(chǎn)生Java代碼 ##3.7 自定義注解 Java tool和framework 提供商可以定義自己的 annotations ,并且內(nèi)核支持自定義annotation的插件和執(zhí)行處理器
3.8 安全性 XML-數(shù)字簽名(XML-DSIG) APIs 用于創(chuàng)建和操縱數(shù)字簽名); 新的方法來訪問本地平臺的安全服務(wù),例如本地Microsoft windows for secure authentication and communicationnative 的Public Key Infrastructure (PKI) 和 cryptographic services, Java Generic Security Services (Java GSS) 和 Kerberos services for authentication, 以及訪問 LDAP servers 來認(rèn)證用戶.
4. JAVA7
4.1 集合類的語法支持
原來的樣子
List list =newArrayList(); list.add("item");Stringitem = list.get(0);Setset=newHashSet();set.add("item");Map map =newHashMap(); map.put("key",1);intvalue = map.get("key");
現(xiàn)在的樣子:(這些集合是不可變的...)
List list = ["item"];Stringitem = list[0];Setset= {"item"};Map map = {"key":1};intvalue = map["key"];
4.2 自動資源管理
Java中某些資源是需要手動關(guān)閉的,如InputStream,Writes,Sockets,Sql classes等。這個新的語言特性允許try語句本身申請更多的資源,這些資源作用于try代碼塊,并自動關(guān)閉。
以前的寫法:
BufferedReader br =newBufferedReader(newFileReader(path));try{returnbr.readLine(); }finally{ br.close(); }
現(xiàn)在的寫法(不需要finally來釋放資源了)
try (BufferedReaderbr = new BufferedReader(newFileReader(path)) { return br.readLine();}
4.3 類型推斷
以前的寫法:
Map> anagrams =newHashMap>();
現(xiàn)在的寫法
Map> anagrams =newHashMap<>();
4.4 數(shù)字字面量下劃線支持
很長的數(shù)字可讀性不好,在Java 7中可以使用下劃線分隔長int以及l(fā)ong了。如:
intone_million = 1_000_000;
這樣子還真看不慣。。。不過的確是可讀性好了。
4.5 switch中使用string
String s ="test";switch(s) {case"test": System.out.println("test");case"test1": System.out.println("test1");break;default: System.out.println("break");break; }
4.6 新增一些取環(huán)境信息的工具方法
FileSystem.getJavaIoTempDir()// IO臨時文件夾 FileSystem.getJavaHomeDir()// JRE的安裝目錄 FileSystem.getUserHomeDir()// 當(dāng)前用戶目錄 FileSystem.getUserDir()// 啟動java進(jìn)程時所在的目錄5
5. java8
5.1 lambda表達(dá)式
提供了lambda表達(dá)式,增加了很多內(nèi)置函數(shù)式接口。尤其是其中的stream接口提供了
5.2 注解改進(jìn)
例如支持多重注解,還有新的target等
這是我的B站公眾號【Linda的編程學(xué)習(xí)資料庫】各位大佬有空可以關(guān)注下,每天更新Java相關(guān)視頻教程。
學(xué)習(xí)中遇到問題有不明白的地方,小編給大家整理了一份B站java視頻教程:尚學(xué)堂給同學(xué)們帶來全新的Java300集課程啦!java零基礎(chǔ)小白自學(xué)Java必備優(yōu)質(zhì)教程_手把手圖解學(xué)習(xí)Java,讓學(xué)習(xí)成為一種享受_嗶哩嗶哩_bilibili
作者:未影P
鏈接:
https://www.jianshu.com/p/498168f7c443
來源:簡書
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。