點(diǎn)擊下載IntelliJ IDEA最新試用版
Java幾乎是獨(dú)一無(wú)二的,它能夠在25年前的現(xiàn)代版本的Java中運(yùn)行代碼。語(yǔ)言開發(fā)人員非常重視向后兼容性,因此,許多組織很高興將Java用作主要的開發(fā)平臺(tái),因?yàn)樗麄冎来a仍會(huì)在JVM上運(yùn)行多年。
長(zhǎng)期存在有很多優(yōu)點(diǎn)。在過(guò)去的25年中,開發(fā)人員一直在用Java為各種行業(yè)和業(yè)務(wù)類型以及不同的平臺(tái)編寫應(yīng)用程序。同時(shí),在這25年中,開發(fā)人員一直在學(xué)校,大學(xué),新兵訓(xùn)練營(yíng)和在職學(xué)習(xí)Java。這創(chuàng)建了一個(gè)大型生態(tài)系統(tǒng),該生態(tài)系統(tǒng)有時(shí)間從經(jīng)驗(yàn)中學(xué)習(xí)并不斷發(fā)展。供應(yīng)商,非營(yíng)利組織和個(gè)人對(duì)Java及其可以解決的問(wèn)題進(jìn)行了充分的文檔記錄和良好的支持。對(duì)于像我們這樣的開發(fā)人員而言,非常重要的是,Java的成熟和廣泛采用意味著對(duì)于想要使用Java進(jìn)行編碼的開發(fā)人員來(lái)說(shuō),有很多工作!
與向后兼容性和成熟度相反,是平臺(tái)和語(yǔ)言的發(fā)展。自2017年(Java 9)起,每六個(gè)月發(fā)布一個(gè)新版本,這使該語(yǔ)言不斷進(jìn)行更改和改進(jìn)。與預(yù)覽功能結(jié)合使用,該語(yǔ)言能夠嘗試新語(yǔ)法,從開發(fā)人員那里獲得反饋,然后標(biāo)準(zhǔn)化對(duì)于使用該語(yǔ)言的人來(lái)說(shuō)確實(shí)有效的新功能。
Java在向后兼容性和擁抱未來(lái)之間很難取得平衡。當(dāng)前評(píng)估向后兼容性并每六個(gè)月發(fā)布一次的方法,但是每三年發(fā)布一次長(zhǎng)期支持,似乎達(dá)到了適當(dāng)?shù)钠胶狻Mㄟ^(guò)為將要?jiǎng)h除的不推薦使用的功能提供警告,以及通過(guò)替換可能消失的功能,該語(yǔ)言得以發(fā)展。
標(biāo)準(zhǔn)對(duì)于開發(fā)人員而言可能不像語(yǔ)言功能那樣令人興奮,但是擁有適用于Java,Java EE和Jakarta EE的標(biāo)準(zhǔn)以及開發(fā)人員遇到的常見(jiàn)用例,確實(shí)使開發(fā)人員的工作變得更加輕松。了解如何使用JDBC與數(shù)據(jù)庫(kù)進(jìn)行通信意味著我們不必關(guān)心數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序是如何實(shí)現(xiàn)的,我們與數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序的交互方式始終相同。在JCP是用來(lái)確定Java標(biāo)準(zhǔn)的過(guò)程之一。
對(duì)于那些不太熟悉Java的人來(lái)說(shuō),有時(shí)候這是一個(gè)驚喜,但是Java是一種非常高性能的語(yǔ)言。它是一個(gè)成熟的平臺(tái),具有25年的性能改進(jìn);具有不同性能配置文件的大量垃圾收集器;JVM在運(yùn)行時(shí)針對(duì)實(shí)際生產(chǎn)用例優(yōu)化了代碼,這比大多數(shù)人類開發(fā)人員所能做到的要好得多。例如,Java在金融領(lǐng)域得到廣泛使用,這取決于低延遲事務(wù)和可預(yù)測(cè)的性能。
自動(dòng)垃圾收集是25年以來(lái)我們通常認(rèn)為理所當(dāng)然的另一件事。我們不必考慮在應(yīng)用程序中如何分配內(nèi)存或如何釋放內(nèi)存。每個(gè)JVM具有一個(gè)或多個(gè)不同的GC算法,因此我們可以選擇一種對(duì)我們的應(yīng)用程序運(yùn)行良好的算法,而不必過(guò)多地關(guān)注內(nèi)部,我們可以繼續(xù)為應(yīng)用程序編寫業(yè)務(wù)邏輯。
如果我們對(duì)應(yīng)用程序運(yùn)行時(shí)的運(yùn)行狀況感興趣,則可以使用許多工具。其中許多甚至是免費(fèi)的,特別是因?yàn)镴ava Flight Recorder和Mission Control現(xiàn)在已成為OpenJDK的一部分(自Java 11起)。諸如JMX之類的工具甚至還允許我們動(dòng)態(tài)管理我們的應(yīng)用程序。
我們剛剛提到的許多功能都是JVM的功能,但是我們特別想調(diào)用JVM,以及它與Java語(yǔ)言是分開的事實(shí)。喜歡JVM的原因很多,其中包括我們已經(jīng)介紹的一些內(nèi)容:WORA,運(yùn)行時(shí)優(yōu)化,性能,供應(yīng)商選擇等,其中許多是由于標(biāo)準(zhǔn)和規(guī)范才得以實(shí)現(xiàn)的。JVM也必須與Java語(yǔ)言分開,這一點(diǎn)也很重要。這意味著可以在平臺(tái)上構(gòu)建不同的語(yǔ)言,從而利用我們剛剛提到的JVM的所有強(qiáng)大功能,同時(shí)提供不同類型的語(yǔ)法和語(yǔ)言功能。
Java在Java 6和8之間的那些安靜的歲月中得以幸存甚至興旺的原因之一(Java 7具有一些強(qiáng)大的功能,但對(duì)于Java開發(fā)人員來(lái)說(shuō),它并不是一個(gè)很大的版本),是因?yàn)槠渌鸍VM語(yǔ)言所致。在JetBrains,我們最喜歡的當(dāng)然是Kotlin,但是JVM是其他流行語(yǔ)言(例如Groovy,Scala,Clojure和JRuby)以及大量其他新語(yǔ)言和重新實(shí)現(xiàn)的語(yǔ)言的平臺(tái)。在許多情況下,這些語(yǔ)言與經(jīng)典Java之間的互操作性有助于我們擁抱和利用這種多樣性。
最引人注目的爭(zhēng)論之一是我們擁有大量的庫(kù)和框架可供選擇,其中許多是開放源代碼且可以免費(fèi)使用。諸如Spring和Spring Boot這樣的流行框架使創(chuàng)建從小型服務(wù)到大型復(fù)雜企業(yè)應(yīng)用程序的一切變得容易。標(biāo)準(zhǔn)意味著,當(dāng)我們?cè)诹硪粋€(gè)環(huán)境中使用類似的東西時(shí),通常并不難理解和使用一個(gè)庫(kù)。Java的成熟以及社區(qū)對(duì)開放源代碼的早期采用,意味著通常存在針對(duì)標(biāo)準(zhǔn)問(wèn)題的現(xiàn)有解決方案。無(wú)需重新發(fā)明輪子。這也意味著,由于許多解決方案已經(jīng)存在并投入使用很長(zhǎng)時(shí)間了,因此它們已經(jīng)過(guò)了良好的測(cè)試,理解和記錄。
貧窮的開發(fā)人員不得不在Internet上搜索一些未知的JAR文件的日子已經(jīng)一去不復(fù)返了,JAR文件包含他們?cè)噲D運(yùn)行的代碼顯然需要的類。尤其是,Maven和Gradle使得構(gòu)建和部署應(yīng)用程序變得容易,而且還以標(biāo)準(zhǔn)方式設(shè)置了具有所有必需依賴項(xiàng)的項(xiàng)目。在新項(xiàng)目或現(xiàn)有項(xiàng)目中開始編碼都非常簡(jiǎn)單。Maven Central和Bintray等公共存儲(chǔ)庫(kù)為我們提供了查找(和發(fā)布)庫(kù)的著名場(chǎng)所。
JUnit的是在1997年創(chuàng)造了這樣幾乎是一樣古老Java本身!它是迄今為止Java世界中最常見(jiàn)的自動(dòng)化測(cè)試框架,并且IntelliJ IDEA附帶了JUnit和TestNG,因?yàn)樗俣ㄈ魏涡碌腏ava項(xiàng)目都將需要測(cè)試框架。面向所有語(yǔ)言的現(xiàn)代測(cè)試框架很可能基于我們現(xiàn)在認(rèn)為來(lái)自JUnit的想法。Java社區(qū)的自動(dòng)化測(cè)試文化在很大程度上歸功于這一庫(kù)。
這是IntelliJ IDEA博客,我們不會(huì)忘記這個(gè)博客!無(wú)論您是相信Java的冗長(zhǎng)性需要IDE,還是因?yàn)槠潇o態(tài)類型而實(shí)際上Java可以真正利用IDE,事實(shí)都是Java開發(fā)人員喜歡他們的IDE(我們也愛(ài)您!)。學(xué)習(xí)有效地使用IDE(無(wú)論是IntelliJ IDEA,Eclipse還是NetBeans),可以通過(guò)以下方式顯著提高開發(fā)人員的生產(chǎn)率:代碼完成和生成,運(yùn)行測(cè)試,調(diào)試,導(dǎo)航和許多其他功能。Java開發(fā)人員通常對(duì)IDE帶來(lái)的好處非常熱情。
Java社區(qū)是一個(gè)大型,成熟,充滿活力且熱情的社區(qū)。全球許多城市都有Java用戶組,如果您無(wú)法參加物理聚會(huì),則有一個(gè)虛擬Java用戶組。在Java的冠軍被公認(rèn)的技術(shù)領(lǐng)導(dǎo)者在Java世界中誰(shuí)出名為共享的東西都是有用或有趣的Java和JVM開發(fā)。Java具有龐大的開源社區(qū),包括通過(guò)OpenJDK的JDK本身。Java社區(qū)重視學(xué)習(xí),教學(xué)和不斷改進(jìn),關(guān)心標(biāo)準(zhǔn)和“最佳實(shí)踐”,并且對(duì)于在實(shí)際環(huán)境中應(yīng)用這些標(biāo)準(zhǔn)務(wù)實(shí)。
當(dāng)然,社區(qū)是由人組成的,但是當(dāng)我問(wèn)開發(fā)人員對(duì)Java的最重視時(shí),其中許多人專門指出了影響Java的Java世界中的個(gè)人。這些人的范圍從同事和老師到像Brian Goetz,Angie Jones,Georges Saab,Mala Gupta和Venkat Subramaniam之類的人。甚至有人提到我。就我個(gè)人而言,我之所以來(lái)Java是因?yàn)槲以诖髮W(xué)期間學(xué)習(xí)過(guò)Java并且有很多工作,但是我之所以留下來(lái)是因?yàn)槲覠釔?ài)人們以及從他們那里得到的幫助和支持。
Java通過(guò)Javadoc使API文檔成為該語(yǔ)言的關(guān)鍵部分。三種不同類型的注釋(Javadoc,塊和行)清楚地表明了開發(fā)人員要留下的注釋類型。Javadoc特別鼓勵(lì)開發(fā)人員將有用的文檔留給其他調(diào)用方法或使用類或包的開發(fā)人員。如果開發(fā)人員無(wú)法在庫(kù)或代碼段上找到詳細(xì)的教程信息,通常可以使用Javadoc來(lái)幫助他們指出正確的方向。
Java社區(qū)不僅在早期就接受開源,而且現(xiàn)在JDK本身也通過(guò)OpenJDK成為開源。開源使多個(gè)供應(yīng)商和個(gè)人更容易參與和協(xié)作。能夠查看Java本身的代碼也很有趣。開源代碼為像我們這樣的開發(fā)人員提供了一個(gè)很好的機(jī)會(huì),可以向已經(jīng)完成所有思考和解決復(fù)雜問(wèn)題的艱苦工作的人們學(xué)習(xí)。
Java平臺(tái)和Java生態(tài)系統(tǒng)中使用的許多最流行的工具都不需要開發(fā)人員(甚至常常是牟利組織)來(lái)支付使用它們的費(fèi)用。即使在Oracle 更改了Java 11的許可和支持之后,他們(以及許多其他供應(yīng)商)仍然提供了一種在生產(chǎn)中免費(fèi)使用該語(yǔ)言的方法。本文中已經(jīng)提到的開源項(xiàng)目,構(gòu)建工具和IDE都是免費(fèi)的或具有免費(fèi)選項(xiàng)。這使Java吸引了開發(fā)人員開始編寫代碼,并且吸引了各種規(guī)模的組織,他們需要在關(guān)注預(yù)算的同時(shí)構(gòu)建軟件。
當(dāng)然,面向?qū)ο蟮木幊滩⒉皇俏ㄒ坏挠螒颍總€(gè)范例都有其優(yōu)點(diǎn)和缺點(diǎn)。Java從一開始就被設(shè)計(jì)為一種OO語(yǔ)言,并且在Java中演示了許多設(shè)計(jì)模式示例和其他面向OO的編碼最佳實(shí)踐。如果您想要一種面向?qū)ο蟮木幊陶Z(yǔ)言,則Java應(yīng)該是您嘗試的語(yǔ)言之一。
Java曾經(jīng)是,現(xiàn)在仍然是一種面向?qū)ο蟮木幊陶Z(yǔ)言。但是它也已經(jīng)成功地從函數(shù)式編程中采用了一些概念(例如lambda表達(dá)式和不可變的數(shù)據(jù)結(jié)構(gòu)),并使它們?cè)贠O范式中很好地工作。類型推斷(例如var)使我們?nèi)匀豢梢允褂渺o態(tài)類型語(yǔ)言的好處,但模板更少。計(jì)算機(jī)科學(xué)仍然是一門相對(duì)年輕的學(xué)科,但是隨著我們學(xué)習(xí)事物,它們可以應(yīng)用于我們現(xiàn)有的工具。Java(語(yǔ)言和整個(gè)生態(tài)系統(tǒng))是根據(jù)新趨勢(shì)和新的“最佳實(shí)踐”不斷發(fā)展的,也是看到現(xiàn)實(shí)世界中事物如何運(yùn)轉(zhuǎn)的結(jié)果。
Java代碼通常是可讀的,即使對(duì)于非Java程序員也是如此。該語(yǔ)言傾向于更加冗長(zhǎng)而不是過(guò)于簡(jiǎn)潔,這使得我們?cè)陂喿xJava代碼時(shí)更容易推理。語(yǔ)言開發(fā)人員尚未實(shí)現(xiàn)運(yùn)算符重載之類的功能,因?yàn)樗麄冋J(rèn)為不要因意外的自定義行為而感到驚訝,這一點(diǎn)很重要。在語(yǔ)言和框架中,有一種避免“魔術(shù)”的趨勢(shì)-盡管某些框架將使用Convention(諸如約定)而不是Configuration(配置)之類的東西來(lái)進(jìn)行操作,而無(wú)需開發(fā)人員必須這樣做。肯定有一個(gè)步驟,例如,使用批注進(jìn)行大量AOP,以及使用注釋進(jìn)行文檔和靜態(tài)分析檢查的更多內(nèi)容。社區(qū)和生態(tài)系統(tǒng)傾向于喜歡標(biāo)準(zhǔn)和“最佳實(shí)踐”,因此即使在非常不同的項(xiàng)目上,Java代碼也經(jīng)常遵循類似的規(guī)則。
我們已經(jīng)介紹了23篇關(guān)于Java的內(nèi)容,但是并沒(méi)有提到一個(gè)功能!老實(shí)說(shuō),這是因?yàn)閷⒆约合拗茷閮H25個(gè)功能似乎非常困難,并且因?yàn)槲覀儗?duì)Java的許多愛(ài)好與語(yǔ)法或功能無(wú)關(guān)。當(dāng)然,我們提供了一個(gè)視頻>>,顯示所有這些功能,請(qǐng)使用IntelliJ IDEA!>>!
我們每六個(gè)月獲得一次新功能,每個(gè)LTS版本通常為運(yùn)行于其上的任何應(yīng)用程序提供開箱即用的更好性能。Java 15(2020年9月)應(yīng)該具有:隱藏類;文本塊(不再預(yù)覽);更新了記錄的預(yù)覽;instanceof的模式匹配;和密封類的預(yù)覽。
展望未來(lái),我們還希望看到:Project Loom易于使用,輕量級(jí)并發(fā);Valhalla項(xiàng)目的內(nèi)聯(lián)類型; 來(lái)自Amber項(xiàng)目的更多語(yǔ)言更改,例如lambda剩余的內(nèi)容;巴拿馬計(jì)劃將使程序員更輕松地訪問(wèn)外部API。萊頓項(xiàng)目(Project Leydon)縮短了啟動(dòng)時(shí)間; 對(duì)各種垃圾收集器進(jìn)行更多改進(jìn);還有更多。
Java的前途一片光明!
====================================================
JetBrain技術(shù)交流群現(xiàn)已開通,QQ搜索群號(hào)“786598704”或者掃描下方二維碼即可加入
標(biāo)簽:
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn