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