跳至內容

Java

出自Taiwan Tongues 台語維基
於 2025年8月22日 (五) 12:59 由 TaiwanTonguesApiRobot留言 | 貢獻 所做的修訂 (從 JSON 檔案批量匯入)

(差異) ←上個修訂 | 已批准修訂 (差異) | 最新修訂 (差異) | 下個修訂→ (差異)

Java是一種廣泛使用的電腦程式設計語言,有跨平台佇遐、物件導向、泛型程式設計的特性,廣泛應用企業級 Web 應用開發佮行動應用開發。

蹛佇咧昇陽電腦的詹姆斯 ・ 高斯林等人佇一九九空年代初開發 Java 語言初初開始的形,頭仔號名號做 Oak,目標設定佇厝裡用電器等小型系統的程式語言,應用佇電視機、電話、鬧鐘、烘 pháng 機等家用電器的控制佮通訊。因為遮的智慧型家電的市場需求無預期的懸,昇陽電腦放棄矣這項計畫。隨著一九九空年代網際網路的發展,昇陽電腦看著 Oak 佇網路頂懸應用的前景,所以改造著 Oak,佇一九九五年五月以 Java 的名稱正式釋出。Java 伴綴網路綴猛發展,漸漸成做重要的網路程式語言。

Java 程式語言的風格真接近 C + + 語言。繼承矣 C + + 語言物件導向技術的核心,放捒容易引起錯誤的指標,以參照取代;徙掉矣 C + + 中的運算子重載佮偌重繼承特性,用介面取代;增加糞埽回收器功能。佇咧 Java SE 一孵五版本中引入了泛型程式設計、類型安全的列舉、凡勢長參數佮自動裝 / 拆箱特性。昇陽電腦著 Java 語言的解說是:「 Java 程式語言是一个簡單、物件導向、散式、解說性、勇健、安全、佮系統無關係、會當徙栽、高效能、加執行緒佮動態的語言」。

Java 和一般的編譯語言無仝款直譯語言。伊頭先將原始碼編譯做位元組碼,閣依賴各種無仝平台的虛擬機器來解說執行位元組碼,對而具有「一改編寫,四界執行」的跨平台特性。佇咧以前 JVM 中,這佇一定程度降低 Java 程式的執行效率。猶毋過佇 J 二 SE 一孵四 . 二釋出了後,Java 的執行速度有大幅度提升。

佮傳統的型態無仝款,昇陽電腦咧推捒 Java 就共其做開放的技術。全球的 Java 開發公司予人要求所設計的 Java 軟體著愛相容。「Java 語言靠群體的力量而非公司的力量」是昇陽電腦的口號之一,並且得著廣大軟體開發商的認同。這和微軟公司所倡導的注重精英和封閉式的模式完全無仝,此外,微軟公司尾仔推出佮競爭的 . NET 平台佮模仿 Java 的 C # 語言。後來昇陽電腦被甲骨文公司併購,Java 嘛隨之成做甲骨文公司的產品。

目前,行動作業系統 Android 大部份的代碼是用 Java 程式設計語言編程。

歷史

古早的 Java

語言上開始只是昇陽電腦(Sun MicroSystems)公司佇一九九空年十二月開始研究的一个內部項目。昇陽電腦公司的一个號做派屈克 ・ 諾頓的工程師予公司家己開發的 C + + 和 C 語言編譯器舞甲臭頭額,因為這內底的 API 極其歹用。派屈克決定改用 NeXT,同時伊嘛得著研究公司的一个號做「Stealth 計畫」的這个項目的機會。

「 Stealth 計畫」後來改名做「Green 計畫」,詹姆斯 ・ 高斯林佮麥克 ・ 舍林丹(Mike Sheridan)嘛加入著派屈克的工課小組。𪜶佮其他幾个工程師做伙佇咧加利福尼亞州門羅帕克市沙丘路的一个細條的作室內底研究開發新的技術,相準後一代智慧型家電(如微波爐)的程式設計,昇陽電腦預料未來科技欲佇厝內用電器領域真大的顯身手。團隊頭仔考慮使用 C + + 語言,但是真濟成員包括昇陽電腦的頭手科學家比爾 ・ 喬伊,發現 C + + 佮可用的 API 佇咧某乜方面存在真大問題。

工作小組咧用的是1875入式系統,會當用的資源極其有限。足濟成員發現 C + + 傷複雜以至真濟開發者定定無錯誤使用。𪜶有發現講 C + + 欠糞埽回收系統,閣有會當徙栽的安全性、分佈程式設計、佮多執行緒功能。最後咧,𪜶想欲愛一種較𠢕徙栽仔各種裝置的平台。

根據會當用的資金,喬他決定開發一種集 C 語言佮 Mesa 語言大成的新語言,佇一份報告頂懸,喬伊共伊號做「未來」,伊提議昇陽電腦的工程師應該佇咧 C + + 的基礎頂面,開發一種物件導向的環境。上代先,高斯林試圖修改佮擴展 C + + 的功能,伊家己講這種新語言為 C + +--, 但是尾仔伊放棄矣。伊將欲創造出一種全新的語言,予伊號名做「Oak」(樹仔), 以伊的辦公室外的樹仔號名。

親像真濟開發新技術的祕密工程仝款,頭路小組無暝無日的穡頭到位一九九三年熱人,會當演示新平台的一部份矣,包括講 Green 作業系統,Oak 的程式設計語言,類庫閣有其硬體。上早的試驗是面向一種類 PDA 裝置,予人號名做Star 七,這種裝置有豔顯的圖形介面佮予人號做「Duke」的智慧型代理來幫助使用者。一九九二年十二月初三,這台裝置進行矣展示。

仝年的十一月,Green 計畫予人轉化做「FirstPerson 有限公司」,一个昇陽電腦的全資子公司,團隊也予重新安排到帕洛阿爾托。FirstPerson 團隊對建造一種懸度互動的裝置感興趣,彼當時代華納發佈一个關於電視機頂頭的徵求提議書的時陣(Request for proposal), FirstPerson 改變𪜶的目標,成做對徵求意見書的響應,提出一个機頂懸盒平台的提議。但是有線電視業界感覺講 FirstPerson 的平台讓使用者過多的控制權,所以 FirstPerson 的投標敗予 SGI。與三 DO 公司的另外一筆關於機上盒仔的交易嘛無成功,因為𪜶的平台袂當佇電視工業產生任何效益,公司被併回昇陽電腦。

Java 和「Java」

因為商標搜揣顯示 Oak 已經予一間顯示卡製造商註冊。就是仝年的,Oak 予人改名做Java。做使用十六進位編輯器拍開由 Java 原始碼編譯出的二進位檔案(. class 檔案)的話,上頭前三十二位元欲顯示講 CA FE BA BE,即詞組「CAFE BABE」(咖啡厝寶貝)。

Java 佮網際網路

一九九四年六月,佇同約翰 ・ 蓋吉、詹姆斯 ・ 高斯林、比爾 ・ 喬伊、派屈克 ・ 諾蓋、韋恩 ・ 羅斯因佮埃里克 ・ 施密特經歷一場歷時三工的頭腦風暴了後,團隊決定閣一改變拍拚的目標,這擺𪜶決定將這个技術應用佇全球資訊網。𪜶認為講隨著 Mosaic 瀏覽器的到來,網際網路當咧向仝款的高度互動的遠景演變,啊若這遠景就是𪜶佇𪜶有線電視網內底看著的。做原型,派屈克 ・ 諾頓寫一个小型全球資訊網瀏覽器,WebRunner,後來改名做 HotJava。

一九九四年十月,HotJava 和 Java 平台為公司高層進行演示。一九九四年,Java 一垺零 a 版本已經會當提供下載,猶毋過 Java 和 HotJava 瀏覽器的頭一改公開發布煞是佇一九九五年三月二三 SunWorld 大會上進行的。昇陽電腦的科學指導約翰 ・ 起吉宣告 Java 技術。這个釋出是佮網景公司的執行副總裁馬克 ・ 安德森的驚人釋出做伙進行的,宣布網景會佇其瀏覽器內底包含著 Java 的支援。一九九六年一月,昇陽電腦成立矣 Java 業務集團,專門開發 Java 技術。

佇咧流行幾年了後,Java 佇瀏覽器當中的地位予每一步侵蝕。伊佇簡單互動性動畫方面的用途已經完全被 Adobe 公司的 Flash 排斥,二空空五年 Java 傾向予人用佇雅虎遊戲彼款的閣較複雜的應用程式。Java 同時遭受著來自微軟仔反對,𪜶決定佇新版本的 Internet Explorer 和 Windows 中不再閣佮 Java 平台。

佮這个顛倒反,佇咧全球資訊網的侍服器捀佮手提裝置,Java 變甲閣較流行嘛。真濟網站佇後壁咧使用 JSP 佮其他的 Java 技術。

佇咧桌頂系統頂懸,獨立的 Java 程式抑是相對較少看著。這是因為 Java 平台的執行開銷較大,猶閣有真濟人的電腦上無安裝 Java,因為網路一直闊佇較早,下載 Java 曾經是一个度時的代誌。但是隨著電腦計算能力、網路頻闊佇一零年內底取著真大的進步,同時虛擬機器佮編譯器的品質得著提懸,足濟應用程式得著廣泛的使用,包括講:

開源軟體

  • NetBeans 和 Eclipse 等等的軟體開發工具
  • Android 作業系統
  • JEdit
  • Azureus BitTorrent 客戶捀。
  • JNode 作業系統
  • Apache 軟體基金會的 Ant、Derby、Hadoop、Jakarta、POI 和 Tomcat
  • JBoss 和 GlassFish 應用侍服器

商業軟體

  • EIOffice(永中 Office)
  • Minecraft
  • 純純 Java 三 D 遊戲合金戰士 Chrome
  • IBM Websphere、ColdFusion 和 WebLogic
  • IntelliJ IDEA

目前 Java 提供以下三个版本:

  • Java Platform , Enterprise Edition(Java EE:Java 平台企業版)
  • Java Platform , Standard Edition(Java SE:Java 平台標準版)
  • Java Platform , Micro Edition(Java ME:Java 平台微型版)
  • Java Platform , Card Edition

Java 開放原始碼的項目

二空空六年昇陽電腦佇 JavaOne 公佈 Java 開放原始碼的項目,閣推出 OpenJDK 計畫。Java 虛擬機、Java 編譯器佮 Java 類庫以 GNU 通用公眾授權條款公開。

版本歷史

  • 一九九五年五月二三,Java 語言誕生
  • 一九九六年一月,第一啦 JDK-JDK 一孵零誕生
  • 一九九六年四月,十个上主要的作業系統供應商申明欲佇咧其產品中樞入 JAVA 技術
  • 一九九六年九月,大約是八拍三萬个網頁應用矣 JAVA 技術來製作
  • 一九九七年二月十八,JDK 一孵一釋出來
  • 一九九七年四月初二,JavaOne 會議召開,參與者超過一萬人,創當當時全球同類會議規模之紀錄
  • 一九九七年九月,JavaDeveloperConnection 社群成員超過十萬
  • 一九九八年二月,JDK 一孵一予人下載超過二 , 零 , 零
  • 一九九八年十二月初八,JAVA 二企業平台 J 二 EE 釋出
  • 一九九九年六月,昇陽電腦釋出 Java 的三个版本:標準版(J 二 SE)、 企業版(J 二 EE)和微型版(J 二 ME)
  • 二空空空年五月初八,JDK 一爿三釋出
  • 二空空空年五月二九,JDK 一爿四釋出
  • 二空空一年六月五號,NOKIA 宣佈,到二空空三年欲賣一億部支援 Java 的手機仔
  • 二空空一年九月二四,J 二 EE 一爿三釋出
  • 二空空二年二月二十六號,J 二 SE 一爿四釋出,自此 Java 的計算能力有矣大幅度提升
  • 二空空四年九月三十號十八 : 零 PM,J 二 SE 一爿五釋出,成做 Java 語言發展的歷史上閣一里程碑。為著表示講該版本的重要性,J 二 SE 一人攑五更號做 Java SE 五曉空
  • 二空空五年六月,JavaOne 大會召開,昇陽電腦公開 Java SE 六。現此時,Java 的各種版本已經更加名,以取消其中的數字就「二」:J 二 EE 閣較號名做 Java EE,J 二 SE 閣較號名做 Java SE,J 二 ME 閣較號名做 Java ME
  • 二空空六年十二月,昇陽電腦釋出 JRE 六板零
  • 二空空九年十二月,昇陽電腦釋出 Java EE 六
  • 二空一空年十一月,因為 Oracle 公司對 Java 社群的無友善,所以 Apache 唱聲共退出 JCP
  • 二空一一年七月二八,Oracle 公司發佈 Java SE 七
  • 二空一四年三月十八,Oracle 公司釋出 Java SE 八
  • 二空一七年九月二一,Oracle 公司釋出 Java SE九
  • 二空一八年三月二一,Oracle 公司釋出 Java SE 十
  • 二空一八年九月二五,Oracle 公司釋出 Java SE 十一 ( LTS )
  • 二空一九年三月,Oracle 公司釋出 Java SE 十二
  • 二空一九年九月,Oracle 公司釋出 Java SE 十三
  • 二空二空年三月,Oracle 公司釋出 Java SE 十四
  • 二空二空年九月,Oracle 公司釋出 Java SE 十五
  • 二空二一年三月,Oracle 公司釋出 Java SE 十六
  • 二空二一年九月,Oracle 公司釋出 Java SE 十七
  • 二空二二年三月,Oracle 公司釋出 Java SE 十八
  • 二空二二年九月,Oracle 公司釋出 Java SE 十九

語言特性

Java 所以予人開發,是欲達到以下五个目的:

  • 應當使用物件導向程式設計方法學
  • 應當允准仝一程式佇咧無仝的電腦平台執行
  • 應當包括內起的對電腦網路的支援
  • 應當被設計做安全地執行遠端程式碼
  • 應當易於使用,並借鑑以前遐的物件導向語言(如 C + +)的優點。

Java 這技術主要分幾个部份:Java 語言、Java 執行環境、類別館。一般情形下講 Java 時並無分指的是佗一个部分。

Java 佇一鋪五版本的時陣,做重大改變,昇陽電腦並一四五版本重號名做 Java 五曉空。

物件導向

Java 的特點之一就是物件導向,是程式設計方法的一種。「物件導向程式設計語言」的核心之一就是開發者咧設計軟體的時會當使用自訂的類型佮關聯操作。程式碼佮資料的實際集合體叫做「東西」。 一个物件會當想像結結足濟「行為(程式碼)」 和「狀態(資料)」 的物體。對資料結構改變需要佮程式進行通信然後操作,反之亦然。物件導向設計予大型軟體工程的計畫佮設計變甲閣較會當管理,會當增強工程的健康度,減少失敗工程的數量。

跨平台性

跨平台性是 Java 主要的特性之一,迒平台灣使用 Java 語言編寫的程式會當佇編譯了後毋免經過任何的更改,就會當佇任何硬體裝置條件下執行。這個特性定定予人叫做「一改編譯,四界執行」。

執行 Java 應用程式著愛安裝Java 執行的時陣環境(Java Runtime Environment,JRE), JRE 包括講 Java 虛擬機器(Java Virtual Machine,JVM), 以及 Java 平台核心類佮基礎 Java 平台庫。通過 JVM 才會當佇電腦系統執行 Java 應用程式(Java Application), 這佮. Net Framework彼个情況仝款,所以電腦無安裝 JVM,若按呢遮的 java 程式將袂當執行。

實現迒平台性的方法是大多數編譯器咧進行 Java 語言程式的編碼的時陣會生做一个用位元組碼寫做的「半成品」,這乎「半成品」會佇咧 Java 虛擬機器(解說層)的幫助下執行,虛擬機器伊會共伊轉做彼當前所處硬體平台的原始程式碼。了後,Java 虛擬機器會拍開標準庫,咧進行資料(圖片、執行緒佮網路)的存取工作。主要注意的是,就算講已經存在一个進行程式碼翻譯的解說層,就有當時仔 Java 的位元組碼碼抑是會予 JIT 編譯器進行二改編譯。

有一寡編譯器,比如講 GCJ,通自動生做原始坎站無需要解說層。猶毋過遮的編譯器所生的程式碼干焦會當應用佇特定平台。並且 GCJ 目前干焦支援部份的 Java API。

甲骨文公司對 Java 的授權是「全相容的」,這嘛致使著微軟佮昇陽電腦關於著微軟的程式無支援 RMI 和 JNI 介面、並且增加特性為己所用的法律爭端。昇陽電腦最終贏著官司,得著大約是兩千萬美金的賠償,法院強制要求微軟執行昇陽電腦關於 Java 的授權要求。做回應,軟勢無閣佇咧 Windows 系統當中捆縛 Java,上新的 Windows 版本,Windows Vista 和 Internet Explorer 七孵空版本嘛無閣提供對著 Java 應用程式佮控制項的支援。但是昇陽電腦佮其他的使用 Java 執行時系統的公司佇咧 Windows 作業系統下對使用者提供無代價的第三方外掛程式佮程式支援。

Java 語言佇咧上開始應用的時陣是無解說層的,所有需要編譯的程式碼攏直接換做機器的原始程式碼。按呢做雖然使程式得著最佳的效能,但是致使程式泛浡。對 JIT 技術開始,Java 的程式攏經過一改轉換了後才共變做機器碼。誠濟老牌的第三方虛擬機器攏使用一種號做「動態編譯」的技術,也就是講虛擬機器即時監測佮分析程式的執行行為,同時選擇性地對程式所需要的部份來進行編譯佮最佳化。所有遮的技術攏改善矣程式碼的執行速度,但是曷袂予程式的體積變甲失常。

程式的輕便性事實上是軟體編寫誠歹達到的一个目標,Java 雖然成功地實現矣「一改編譯,四界執行」,但是因為平台佮平台之間的差異,所編寫的程式佇咧轉換程式碼的時陣難免會出現微細仔囝、不可察覺的錯誤佮意外。有一寡程式設計師對此非常的頭疼,𪜶笑詼 Java 的程式毋是「一改編譯,四界執行」,是啊「一改編譯,四界除毋著去」。 以 Java AWT 做例,早期 Java AWT 內底提供的開關、文字區等等攏是用電腦系統所預設的模樣來顯示。這令 Java 程式佇咧有一寡無提供圖案的電腦系統產生錯誤(佇咧 Microsoft Windows 有視窗的管理員,佇咧一寡 Linux distribution 著無)。 後來昇陽電腦針對 Java AWT 一寡問題推出 Java Swing。

平台無關係予 Java 佇咧侍服器捀軟體領域非常成功。足濟等服器捀軟體攏使用 Java 抑是相關技術建立。

自動糞埽回收(Garbage Collection)

C + + 語言予顧者怨頭雞仔的原因之一是大多數 C + + 編譯器不支援糞埽收集機制。通常使用 C + + 編程的時,程式設計師於程式中初初化物件的時陣,會佇主機記持體疊懸頂分配一塊記持體佮位址,當無需要這个物件的時陣,進行解構抑是刪除的時陣才閣釋放分配的記持體位址。若是物件是佇咧疊起去分配的,就無法度人閣袂記得刣掉,就會造成記持體洩漏去(Memory Leak)。 長此以往,程式運行的時陣可能會生做誠濟無清楚除的糞埽,無必要的記持體空間。而且若仝一記憶的位址就共你斂兩遍,程式會變甲無穩定,甚至崩潰。因此有經驗的 C + + 程式員攏會共刪除了後共指標重設講 NULL,然後在刪除進前先判斷指標敢是 NULL。

C + + 中嘛會使用「智慧型指標」(Smart Pointer)抑是使用 C + + 代管擴展編譯器的方法來實現自動化記持體釋放,智慧型的指標會當佇標準類庫內底揣著,而且 C + + 代管擴展予微軟 Visual C + + 七配空佮以上版本所支援。智慧型指標的優點是毋免引入寬寬仔的糞埽收集機制,而且會使無考慮執行緒安全的問題,毋過欠點是若無善使用智慧型指標,效能有可能不如糞埽收集機制,而且不斷的分配和釋放記憶體可能造成記憶體碎片,需要手蹄嘿疊進行壓縮。除了這以外,因為智慧型指標是一个因為模板的功能,所以無經驗的程式員需要使用多態特性來做自動來清理的時嘛可能會束手無策。

Java 語言無仝款的,欲講的狀況予自動糞埽收集功能自動處理。物件的建立佮囥攏是佇咧記憶體堆疊面頂咧進行的。做一个物件無任何參照的時陣,Java 的自動糞埽收集機制就發揮作用,自動刪除這个物件所佔用的空間,釋放記持體以避免記持體洩漏。

注意程式的設計師就無需要修改 finalize 方法,自動糞埽收集嘛會發生作用。毋過記憶體洩漏並毋是就此避免,當程式員疏忽大意地袂記得解除一个物件無應該有的參照時陣,記持體洩漏猶原不可避免。

無仝廠商、無仝版本的 JVM 中的記憶體糞埽回收的機制並無完全仝,通常越新版本的記持體回收機制愈緊,IBM、BEA、昇陽電腦等等的開發 JVM 的公司攏捌講過家己製造出世界上上緊的 JVM,JVM 效能的世界紀錄嘛佇咧不斷的被拍破並提懸。

IBM 有一篇有關 Java 記持體回收的機制比袂啟用糞埽收集機制的 C + + 記持體處理快數倍的技術文章,啊若出名的 Java 技術冊《Java 編程思想》(_ Thinking in Java _)也有一段論述 Java 記持體佮效能達到甚至超過 C + + 的章節。

基本語法

編寫 Java 程式進前應注意以下幾點:

  • 寫敏感:Java 是大細寫敏感的,這就意味對識別碼 ` Hello ` 佮 ` hello ` 是無仝款的。
  • 類名:對所有的類來講,類名的首字母應該大寫。若是類名由若干單詞組成,遐爾逐个單詞的首字母應該大寫,比如講 `MyFirstJavaClass`。
  • 方法名:所有的方法名攏應該以小寫字母開頭。若方法名有若干單詞,則後壁每一个單詞條字母大寫,比如講 `myFirstJavaMethod`。
  • 原始檔名:原始檔名必須佮檔 àn-nāi 名唯一而且是公開 ( 由 public 關鍵詞修飾 ) 的類名仝款。做儲存檔案的時陣,你應該愛使用這个號做檔名儲存(摵摵咧 Java 是大細寫敏感的), 檔名的字尾為 ` . java `。(若檔名佮類名無相𫝛會致使編譯錯誤)。
  • 主方法入口:所有的 Java 程式由 ` public static void main ( String [ ] args ) ` 方法開始執行。

Java 關鍵字

下跤列出矣 Java 關鍵字。這關鍵字袂使使佇常數、變數、佮任何識別碼的名稱。

注釋

注釋的作用:標識程式是創啥的唅,猶閣有伊是按怎構建的。注釋幫助程式設計師進行相溝通猶閣有理解程式。注釋毋是程式設計語言,所以編譯器編譯程式的時陣共𪜶禁掉。

介面佮類別

Java 內建矣建立介面的類別,會使按呢用:

這段路程式碼的意思是任何實現(implement)` Deleteable ` 介面的類別攏著愛實現 ` delete ( ) ` 方法。逐个類別對這个方法的實現會使家己客製化。由此概念會當引出足濟種使用方法,下跤是一个類別个例:

佇另外一个類別中,會當使用按呢的程式碼:

因為在列中所有的東西攏會當使用 ` delete ( ) ` 方法。` Deleteable ` 在列中包括 ` Fred ` 用物件的參照,這个類別佮其他 ` Deleteable ` 類別咧使用 ` deleteAll ( ) ` 方法的時陣無需要進行任何的改變。

啊所以按呢做就是為著佇介面的執行佮其程式碼之間來進行區別。比如講伊,一个名叫 ` Collection ` 的介面會當包括任何物件所需要的引入、轉換佮儲存資料的方法,其他的類攏會當使用這个介面。猶毋過這个介面會當是一个會當重定義大細的佇列、一个連結串列或者是其他功能的集合。

這種特性其實是一種折中的辦法。Java 的設計者無想欲予 Java 有偌重繼承的特性,因為乎 C + + 偌重繼承顯示這款特性的困難。Java 的介面功能會當提供仝款的功能,但是曷袂閣足複雜。

應用程式開發介面

佇咧 Java 語言內底,應用程式介面(API)化身成類別,並且分組成做套件。逐家包括中有相關的介面佮類。對著無仝的平台,Java 提供著無仝款版本的包。API 的設定由昇陽電腦佮其他公司通過 JCP(Java 社群程式)決定。任何公司佮個人攏會當參與這个工程,著 API 進行設計。二空空四年,IBM 和 BEA 公司準備聯合對官方的 Java 開源軟體工程進行支援,但是二空空五年初,昇陽電腦拒絕了這个支援。

Hello World

下跤這个程式顯示「Hello world !」然後結束執行,注意 ` java . lang ` 套件是自動載入的,所以無需要佇程式進前加入 ` import java . lang . * ; `

關於著 Java 的批評

Java 試圖通過新的方式解決軟體編寫的複雜性。足濟人認為講 Java 語言做到矣伊承諾的一切,毋過,某一寡情形下,Java 會共簡單問題導向複雜化。就算講 Java 並毋是一門完美的語言,但是伊的出現確實是予大規模的軟體協同開發提供了新的思路。

整體性問題

並毋是所有的工程佮環境需要企業等級的複雜性,譬如講一个簡單的個人網站或者是獨自編程的程式師所寫的程式。遮的程式師會發現 Java 的複雜管理對家己欲做的程式來講傷過強大矣。一寡人伊嘛感覺講 Java 佇物件導向頂懸做的無 Ruby 和 Smalltalk 純粹。但是閣上新出現的用 Java 實現的語言 Groovy 去解決著遮的問題。

成做一款已經建立的新技術,Java 顯然綜合了真濟語言的特性,比如講 C + +、C 語言、Python 等咧。一寡對於 Java 的評論認為 Java 的不變性咧動搖。

語言問題

有一寡程式師無愛原始類型(primitive type)佮類別(class)的分離,尤其是遐的捌使用過 Smalltalk 和 Ruby 的程式設計師。Java 的代碼佮其他的代碼來講傷長,這佮伊的輕便化聲明相違背。此外 Java 一般嘛會合認式的自動植入過濟濟的標準庫代碼,致使整體運行會出現沓沓仔

Java 是一種單繼承的語言。這也致使著程式師咧試圖使用偌重咧承的時陣的不便,足濟語言攏會當使用這个特性。猶毋過 Java 會使來使用介面類,共偌重繼承可能致使的風險減少到上細。Java 無支援運算子重載,這是為著欲防止運算子重載予代碼的功能變甲霧嗄嗄。但是用 Java 實現的語言 Groovy 會當進行運算子重載。過去 Java 對文字的操作佮其他的語言,比如講 Perl 和 PHP 相較差的較濟,猶毋過 Java 佇咧一鋪四版本的時陣引入正規表示式。

至 Java 一人七為止,Java 語言無支援閉包(closure)佮濫入(mixin)特性。

Java 一爿八加入 lambda 表達式(Lambda Expressions)。

類庫問題

使用 Swing 平台咧編寫的帶有 GUI(圖形使用者介面)的程式佮其他原始程式足無仝款的。選用 AWT 家私包編寫程式的程式師看著的攏是原始介面,而且嘛無法度提著先進的 GUI 編程支援,若使用,就愛提供逐家平台頂懸需要的 API,這將是一項大摸的工程。Swing 是完全用的 Java 語言所寫的程式,避免介面的元素重複的問題,干焦使用所有平台攏支援的上基本的繪圖機制。但是真濟使用者毋知影欲按怎佇 Java 風格佮 Windows 風格之間進行轉換,結果造成矣 Java 程式的介面佇足濟程式內底非常特殊。蘋果電腦已經提供優化過的 Java 運行的時程式,包括著矣 Mac OS X 的經典 Aqua 介面風格。

佇咧 IBM 寄付予 Eclipse 基金會的 SWT 介面框架中,使用者會看著熟似的本地風格介面。但這閣引起了無仝喜愛的開發人員之間的爭論。

效能問題

因為 Java 編譯器佮虛擬機的無仝款著 Java 代碼的效能影響比語言較本身的影響大的較濟,所以統一討論 Java 的程式的效能不時是有誤導性的。根據 IBM 的資料,佇仝款的硬體頂懸二空空一年彼陣的 IBM JDK 版本的效能是一九九六年的 JDK 版本的十倍左右。是踮仝一个時陣,無仝公司的 JDK 和 JRE 的效能嘛無仝款,比如講昇陽電腦、IBM、BEA 等公司攏有家己開發的 JDK 和 JRE。

Java 語言的一寡特性不可避免的有額外的效能代價,譬如講陣列範圍檢查、運行時類型檢查等等。Java 程式的效能閣會因為無仝款的動態複雜性佮糞埽處理機制使用的偌濟啊若各有無仝款。若是 JVM 的實現較優化的話,按呢遮的功能甚至會當增加記憶體分配的效能。這和總是使用 STL 抑是代管 C + + 的程式的情況類似。

就算講按呢,猶原有真濟人認為 Java 的效能低。這部份歸因為昇陽電腦上頭仔的 JVM 實現使用未優化的解說機制來執行位元組碼。一寡新版本的 JVM 使用 Just-In-Time(JIT)編譯器,佇載入位元組碼的時陣共伊編譯做針對運行環境的本地代碼來實現一寡本地編譯器的優化特性。Just-In-Time 機制佮本地編譯的效能較猶原是一个有爭議的話題。JIT 編譯需要足濟時間,對著運行的時間無長或者是代碼有真濟大型程式並無適宜。但是無算 JIT 編譯階段的話,程式的運行效能佇足濟的 JVM 落來會當佮本地編譯的程式一爭短長,甚至佇一寡計算較密集的數值計算領域嘛是按呢。目前,Java 已經咧用閣較先進的 HotSpot 技術來代替 JIT 技術,Java 的效能有閣較進一步的提升。另外咧,咧使用-server 選項運行 Java 程式的時陣,嘛會使著 Java 進行閣較深入的優化,較親像運行的時陣會調用較濟的方法內聯(inline)到程式來提高運行的速度,這就是咱所講的「動態優化」,而本地編譯器是無法度做到這點的;這嘛是一寡 Java 代碼比對應用 C / C + + 等語言編寫的本地代碼運行的閣較緊的原因之一。微軟乎 . NET 平台嘛用使用 JIT 編譯器,所以嘛有類似問題。

Java 的設計目的主要是安全性佮可紮的,所以所以對一寡特性,譬如講對硬體架構佮記憶體位址存取的直接存取攏予去除了。若需要間接調用遮的底層功能的話,就需要使用 JNI(Java 本地介面)來調用本地代碼,間接存取意味捷捷調用遮的特性的時效能損失會足大的,微軟乎 . NET 平台嘛有這款的問題。所以到這馬目前為止,效能敏感的代碼,比如講趕動程式佮三 D 電子遊戲,猶是大多使用本地編譯,甚至直接以無直接支援物件導向的 C 語言抑是機器碼編寫。但是最近已經有真濟用純 Java 編寫的三 D 遊戲,其效果佮用 C 語言編寫的不相上下,比如講「合金戰士」(英文名:Chrome)。 這主要是因為新版的 Java 三 D 技術已經會當像 C + + 仝款調用硬體加速,也就是使用顯示卡來加速,無論是 C + + 抑是 Java 語言寫的三 D 遊戲攏是使用顯示卡及 GPU 來處理,從來予伊開 CPU 會當專門看著其他方面的工作。

用途

桌面 GUI 應用程式:

Java 通過抽象窗仔口工具包(AWT), Swing 和 JavaFX 等等多種方式提供 GUI 開發。雖然 AWT 包含真濟預先構建的組件,如選單,揤鈕,列表以及眾多第三方組件,猶毋過 Swing(一个 GUI 小部件的工具包)閣提供某寡進階組件,如樹,格仔,捲予振動窗,索引標籤式面枋佮列表。JavaFX 是一組圖形佮媒體包,提供矣 Swing 互操作性,三 D 圖形功能佮自包含的部署模型,會當快速編寫 Java 小應用程式佮應用程式的指令碼。

行動應用程式:

Java Platform,Micro Edition(Java ME 抑是 J 二 ME)是一个迒平台仔框殼,用佇構建可能所有的 Java 支援的裝置(包括功能形手機仔佮智慧型手機仔)上執行的應用程式。此外,上受歡迎的行動作業系統之一的 Android 應用的程式通常使用 Android 軟體開發套件(SDK)若其他的環境佇咧 Java 中編寫指令碼。

1875入式系統:

對微型晶片到專用電腦的躉入式系統是執行專門任務的大型電腦電系統的組件。諸如 SIM 卡,藍光碟放放器,公用事業儀表佮電視機等等真濟款的裝置攏來用納入去 Java 技術。根據甲骨文公司稱,一百%的藍光碟播放器佮一石二五億台電視裝置攏採用 Java 技術。

Web 應用程式:

Java 通過 Servlets,Struts 抑是 JSP 提供著 Web 應用程式的支援。程式語言提供的簡單程式的設計佮閣較懸的安全性予大量政府應用程式會當用佇基於 Java 的健康,社會安全,教育佮保險。Java 嘛會使用 Broadleaf 等開源電子商務平台開發電子商務 Web 應用程式。

分散式系統:

Java 閣較濟時陣用佇構建大型的分散式應用,是因為 java 的分散式生態非常的豐富,各種成熟的基礎組件幫贊 java 開發者快速搭建起分散式系統。較出名的散式框架有 : spring cloud , dubbo , zookeeper

Web 侍服器佮應用程式侍服器:

今仔日的 Java 生態系統包括多個 Java Web 侍服器佮應用程式侍服器。雖然 Apache Tomcat,Simple,Jo  ! , Rimfaxe Web 侍服器(RWS)和 Project Jigsaw 占領矣 Web 侍服器空間,猶毋過 WebLogic,WebSphere 和 Jboss EAP 佇商業應用侍服器領域占領重要的地位。

企業應用程式:

Java 企業版(Java EE)是一種流行的平台,為指令碼佮執行企業軟體(包括網路應用程式佮 Web 服務)提供 API 佮執行的時陣環境。甲骨文宣稱 Java 會當佇咧九十七%的企業電腦執行。Java 憑藉閣較懸的效能保證佮閣較緊的計算能力予得像 Murex 這款的高頻交易系統會當予人編入指令碼內底。同時伊也是各種銀行應用程式的中樞,伊共這 Java 自早端使用者捀執行到尾溜侍服器捀。

科學應用:

Java 是真濟軟體開發人員用來編寫牽連科學計算佮數學運算的應用程式的選擇之一。遮的程式通常予人認為是快速佮安全的,有閣較懸的會當紮式性佮低維護性。像 MATLAB 按呢的應用程式使用 Java 來做互動使用者介面和做核心系統的一部份。

參見

註解

參考文獻

參照

來源

外部連結

Java 官方網站