2021-04-06

1. 介紹

JAVA作為使用的主力語(yǔ)言,掌握下其歷史發(fā)展也是有必要的??纯磸腏AVA5開(kāi)始到現(xiàn)在的JAVA9有哪些變化。借此機(jī)會(huì),也可以看看哪些特性我們是已經(jīng)用到的,哪些是還沒(méi)有用到的。

我們?cè)贗DEA里面也可以看到language level里面的信息,這里也大致寫(xiě)了下各個(gè)版本JDK的新特性。

簡(jiǎn)單概括下就是:

JAVA1.3:普通的原始的JAVA,基本語(yǔ)法相信大家都見(jiàn)過(guò)了

JAVA1.4:assert關(guān)鍵字

JAVA5:枚舉類(lèi)型、泛型、自動(dòng)拆裝箱

JAVA6: @Override注解

JAVA7: <>符號(hào)、ARM支持、支持多catch

JAVA8:Lamda表達(dá)式,類(lèi)型注解等

JAVA9: 模塊化、接口中的私有方法等

下面我們更加詳細(xì)的分析下各個(gè)版本有哪些新特性。

2. JAVA5新特性

2.1 泛型 Generics

引用泛型之后,允許指定集合里元素的類(lèi)型,免去了強(qiáng)制類(lèi)型轉(zhuǎn)換,并且能在編譯時(shí)刻進(jìn)行類(lèi)型檢查的好處。Parameterized Type作為參數(shù)和返回值,Generic是vararg、annotation、enumeration、collection的基石。

泛型可以帶來(lái)如下的好處總結(jié)如下:

類(lèi)型安全:拋棄List、Map,使用List?、Map?給它們添加元素或者使用Iterator?遍歷時(shí),編譯期就可以給你檢查出類(lèi)型錯(cuò)誤

方法參數(shù)和返回值加上了Type: 拋棄List、Map,使用List?、Map

不需要類(lèi)型轉(zhuǎn)換:List?list=new ArrayList?();

類(lèi)型通配符“?”: 假設(shè)一個(gè)打印List?中元素的方法printList,我們希望任何類(lèi)型T的List?都可以被打印 ##2.2 枚舉類(lèi)型 引入了枚舉類(lèi)型 ##2.3 自動(dòng)裝箱拆箱(自動(dòng)類(lèi)型包裝和解包)autoboxing & unboxing 簡(jiǎn)單的說(shuō)是類(lèi)型自動(dòng)轉(zhuǎn)換。 自動(dòng)裝包:基本類(lèi)型自動(dòng)轉(zhuǎn)為包裝類(lèi)(int ——Integer) 自動(dòng)拆包:包裝類(lèi)自動(dòng)轉(zhuǎn)為基本類(lèi)型(Integer——int) ##2.4 可變參數(shù)varargs(varargs number of arguments) 參數(shù)類(lèi)型相同時(shí),把重載函數(shù)合并到一起了。 如:

publicvoidtest(object... objs){for(Object obj:objs){? ? ? ? System.out.println(obj);? ? }}

2.5 Annotations(重要) 它是java中的metadata(注釋?zhuān)?/p>

注解在JAVA5中就引入了。這是非常重要的特性?,F(xiàn)在注解的應(yīng)用已經(jīng)隨處可見(jiàn)。不過(guò)JAVA5的注解還不成熟,沒(méi)法自定義注解。

2.6 新的迭代語(yǔ)句

for(intn:numbers){//process}

2.7 靜態(tài)導(dǎo)入(import static )

導(dǎo)入靜態(tài)對(duì)象,可以省略些代碼。不過(guò)這個(gè)也不常用。、

importstaticjava.lang.System.out;//導(dǎo)入java.lang包下的System類(lèi)的靜態(tài)方法out;publicclassHelloWorld{publicstaticvoidmain(String[] args){out.print("Hello World!");//既是在這里不用再寫(xiě)成System.out.println("Hello World!")了,因?yàn)橐呀?jīng)導(dǎo)入了這個(gè)靜態(tài)方法out。}}

2.8 新的格式化方法(java.util.Formatter)

formatter.format("Remaining account balance: $%.2f", balance);

2.9 新的線程模型和并發(fā)庫(kù)Thread Framework(重要)

最主要的就是引入了java.util.concurrent包,這個(gè)都是需要重點(diǎn)掌握的。

HashMap的替代者ConcurrentHashMap和ArrayList的替代者CopyOnWriteArrayList

在大并發(fā)量讀取時(shí)采用java.util.concurrent包里的一些類(lèi)會(huì)讓大家滿(mǎn)意BlockingQueue、Callable、Executor、Semaphore

3. JAVA6

JAVA6當(dāng)中

3.1 Web Services

優(yōu)先支持編寫(xiě) XML web service 客戶(hù)端程序。你可以用過(guò)簡(jiǎn)單的annotaion將你的API發(fā)布成.NET交互的web services. Mustang 添加了新的解析和 XML 在 Java object-mapping APIs中, 之前只在Java EE平臺(tái)實(shí)現(xiàn)或者Java Web Services Pack中提供.

3.2 Scripting

現(xiàn)在你可以在Java源代碼中混入JavaScript了,這對(duì)開(kāi)發(fā)原型很有有用,你也可以插入自己的腳本引擎。

3.3 JDBC4.0

JAVA6將聯(lián)合綁定 Java DB (Apache Derby). JDBC 4.0 增加了許多特性例如支持XML作為SQL數(shù)據(jù)類(lèi)型,更好的集成Binary Large OBjects (BLOBs) 和 Character Large OBjects (CLOBs) .

3.4 UI優(yōu)化

GUI 開(kāi)發(fā)者可以有更多的技巧來(lái)使用 SwingWorker utility ,以幫助GUI應(yīng)用中的多線程。, JTable 分類(lèi)和過(guò)濾,以及添加splash閃屏。

Swing擁有更好的 look-and-feel , LCD 文本呈現(xiàn), 整體GUI性能的提升。Java應(yīng)用程序可以和本地平臺(tái)更好的集成,例如訪問(wèn)平臺(tái)的系統(tǒng)托盤(pán)和開(kāi)始菜單。Mustang將Java插件技術(shù)和Java Web Start引擎統(tǒng)一了起來(lái)。 ##3.5 監(jiān)控管理增強(qiáng) 添加更多的診斷信息,綁定了不是很知名的 memory-heap 分析工具Jhat 來(lái)查看內(nèi)核導(dǎo)出。 ##3.6 編譯API compiler API提供編程訪問(wèn)javac,可以實(shí)現(xiàn)進(jìn)程內(nèi)編譯,動(dòng)態(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ù)字簽名); 新的方法來(lái)訪問(wèn)本地平臺(tái)的安全服務(wù),例如本地Microsoft Windows for secure authentication and communicationnative 的Public Key Infrastructure (PKI) 和 cryptographic services, Java Generic Security Services (Java GSS) 和 Kerberos services for authentication, 以及訪問(wèn) LDAP servers 來(lái)認(rèn)證用戶(hù).

4. JAVA7

4.1 集合類(lèi)的語(yǔ)法支持

原來(lái)的樣子

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 自動(dòng)資源管理

Java中某些資源是需要手動(dòng)關(guān)閉的,如InputStream,Writes,Sockets,Sql classes等。這個(gè)新的語(yǔ)言特性允許try語(yǔ)句本身申請(qǐng)更多的資源,這些資源作用于try代碼塊,并自動(dòng)關(guān)閉。

以前的寫(xiě)法:

BufferedReader br =newBufferedReader(newFileReader(path));try{returnbr.readLine();? ? ? ? ? ? ? ? }finally{? ? ? ? ? ? ? ? ? ? br.close();? ? ? ? ? }

現(xiàn)在的寫(xiě)法(不需要finally來(lái)釋放資源了)

try (BufferedReaderbr = new BufferedReader(newFileReader(path)) {? ? ? ? ? ? ? return br.readLine();}

4.3 類(lèi)型推斷

以前的寫(xiě)法:

Map> anagrams =newHashMap>();

現(xiàn)在的寫(xiě)法

Map> anagrams =newHashMap<>();

4.4 數(shù)字字面量下劃線支持

很長(zhǎng)的數(shù)字可讀性不好,在Java 7中可以使用下劃線分隔長(zhǎng)int以及l(fā)ong了。如:

intone_million = 1_000_000;

這樣子還真看不慣。。。不過(guò)的確是可讀性好了。

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臨時(shí)文件夾? FileSystem.getJavaHomeDir()// JRE的安裝目錄? FileSystem.getUserHomeDir()// 當(dāng)前用戶(hù)目錄? FileSystem.getUserDir()// 啟動(dòng)java進(jìn)程時(shí)所在的目錄5?

5. java8

5.1 lambda表達(dá)式

提供了lambda表達(dá)式,增加了很多內(nèi)置函數(shù)式接口。尤其是其中的stream接口提供了

5.2 注解改進(jìn)

例如支持多重注解,還有新的target等

進(jìn)群:697699179可以獲取Java各類(lèi)入門(mén)學(xué)習(xí)資料!

這是我的微信公眾號(hào)【編程study】各位大佬有空可以關(guān)注下,每天更新Java學(xué)習(xí)方法,感謝!

學(xué)習(xí)中遇到問(wèn)題有不明白的地方,推薦加小編Java學(xué)習(xí)群:697699179內(nèi)有視頻教程 ,直播課程 ,等學(xué)習(xí)資料,期待你的加入

1人點(diǎn)贊

隨筆

作者:未影P

鏈接:http://www.itdecent.cn/p/498168f7c443

來(lái)源:簡(jiǎn)書(shū)

著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. 介紹 JAVA作為使用的主力語(yǔ)言,掌握下其歷史發(fā)展也是有必要的。看看從JAVA5開(kāi)始到現(xiàn)在的JAVA9有哪些...
    未影P閱讀 1,293評(píng)論 0 6
  • 1. 介紹 JAVA作為使用的主力語(yǔ)言,掌握下其歷史發(fā)展也是有必要的??纯磸腏AVA5開(kāi)始到現(xiàn)在的JAVA9有哪些...
    編程小世界閱讀 3,935評(píng)論 7 13
  • (一)Java 5 相關(guān)知識(shí)點(diǎn) 1)增強(qiáng)型 for 循環(huán): 答:增強(qiáng) for 循環(huán):foreach 語(yǔ)句,fore...
    tjqbtp閱讀 620評(píng)論 0 1
  • 1 數(shù)組也是一種類(lèi)型 Java中要求所有的數(shù)組元素具有相同的數(shù)據(jù)類(lèi)型。因此在一個(gè)數(shù)組中,數(shù)組元素的類(lèi)型是唯一的,不...
    9K賬號(hào)閱讀 601評(píng)論 0 0
  • 給你學(xué)習(xí)路線:html-css-js-jq-javase-數(shù)據(jù)庫(kù)-jsp-servlet-Struts2-hibe...
    屈浩宇閱讀 173評(píng)論 0 0

友情鏈接更多精彩內(nèi)容