Java入門——初識Java

Java入門——初識Java

摘要:本文主要對Java這門編程語言進行簡單的介紹。java

Java簡介

說明

Java語言歷時十多年,已發展成爲人類計算機史上影響深遠的編程語言,從某種程度上來看,它甚至超出了編程語言的範疇,成爲一種開發平臺,一種開發規範。Java語言所崇尚的開源、自由等精神,吸引了全世界無數優秀的程序員。事實是,從人類有史以來,歷來沒有一門編程語言能吸引這麼多的程序員,也沒有一門編程語言能衍生出如此之多的開源框架。程序員

Java語言是一門很是純粹的面向對象編程語言,它吸取了C++語言的各類優勢,又摒棄了C++裏難以理解的指針等概念。Java語言做爲靜態面向對象編程語言的表明,很好地實現了面向對象理論,容許程序員以優雅的思惟方式進行復雜的編程開發。編程

不只如此,Java語言相關的Java EE規範裏包含了時下最流行的各類軟件工程理念,各類先進的設計思想總能在Java EE平臺以及相關框架裏找到相應實現。從某種程度上來看,學精了Java語言的相關方面,至關於系統地學習了軟件開發相關知識,而不是僅僅學完了一門編程語言。小程序

時至今日,大部分銀行、電信、證券、電子商務、電予政務等系統已經採用Java EE平臺構建,或者正在逐漸過渡到採用Java EE平臺來構建,Java EE規範是目前最成熟的也是應用最廣的企業級應用開發規範。瀏覽器

Java的誕生

Java語言的誕生具備必定的戲劇性,它並非通過精心策劃、製做,最後產生的劃時代產品,從某個角度來看,Java語言的誕生徹底是一種誤會。安全

1990年年底,Sun公司預料嵌入式系統將在將來家用電器領域大顯身手。因而Sun公司成立了一個由James Gosjing領導的Green計劃,準備爲下一代智能家電(如電視機、微波爐、電話)編寫一個通用控制系統。服務器

該團隊最初考慮使用C++語言,可是不少成員包括Sun的首席科學家Bill Joy,發現C++和可用的API在某些方面存在很大問題。並且工做小組使用的是嵌入式平臺,可用的系統資源極其有限。而且不少成員都發現C++太複雜,以至不少開發者常常錯誤使用。並且C++缺乏垃圾回收系統、可移植性、分佈式和多線程等功能。多線程

根據可用的資金,Bill Joy決定開發一種新語言,他提議在C++的基礎上,開發一種面向對象的環境。因而James Gosling試圖經過修改和擴展C++的功能來知足這個要求,可是後來他放棄了,他決定創造一種全新的語言:Oak框架

到了1992年的夏天,Green計劃已經完成了新平臺的部分功能,包括Green操做系統、Oak的程序設計語言、類庫等。同年11月,Green計劃被轉化成了一個Sun公司的全資子公司。jsp

新公司致力於建立一種高度互動的設備。當時代華納公司發佈了一個關於電視機頂盒的徵求提議書時,他們改變了目標,做爲對徵求提議書的響應,提出了一個機頂盒平臺的提議,但在當時市場不成熟的狀況下,他們的項目沒有得到成功。

此時,可憐的Green項目幾乎接近夭折,甚至Green項目組的一半成員也被調到了其餘項目組。

正如中國古代的寓言所言:因禍得福,焉知非福?若是Green項目在機頂盒平臺投標成功,也許就不會誕生Java這門偉大的語言了。

1994年夏天,互聯網和瀏覽器的出現不只給廣大互聯網的用戶帶來了福音,也給Oak語言帶來了新的生機。Gosling當即意識到,這是一個機會,因而對Oak進行了小規模的改造,到了1994年秋,小組完成了第一個Java語言的網頁瀏覽器。Sun公司實驗室主任和技術總監觀看了該瀏覽器的演示,對該瀏覽器的效果給予了高度評價。當時Oak這個商標已被別人註冊,因而只得將Oak改名爲Java

Java的發展

Sun公司在1995年年初發布了Java語言,Sun公司直接把Java放到互聯網上,免費給你們使用。甚至連源代碼也不保密,也放在互聯網上向全部人公開。

幾個月後,讓全部人都大吃一驚的事發生了:Java成了互聯網上最熱門的寶貝。居然有10萬多人次訪問了Sun公司的網頁,下載了Java語言。而後,互聯網上當即就有數不清的Java小程序(也就是Applet),演示着各類小動畫、小遊戲等。Java語言終於揚眉吐氣了,成爲了一種廣爲人知的編程語言。

在Java語言出現以前,互聯網的網頁實質上就像是一張紙,不會有任何動態的內容。有了Java語言以後,瀏覽器的功能被擴大了。Java程序能夠直接在瀏覽器裏運行,能夠直接與遠程服務器交互。用Java語言編程,能夠在互聯網上像傳送電子郵件同樣方便地傳送程序文件。

歷史版本

JDK1.0

Sun公司在1995年年初發布了Java語言,同時放到了互聯網上,免費給你們使用,甚至連源代碼也不保密,對全部人公開,這就是所謂的開源。以後吸引了大批的程序員使用Java語言開發出了各類小動畫、小遊戲等。

Sun公司雖然推出了Java,但這只是一種語言,若是想要開發複雜的應用程序,必需要有一個強大的開發類庫。

所以,Sun在1996年年初發布了JDK1.0。這個版本包括兩部分:運行環境(JRE)和開發環境(JDK)。

◆ 運行環境(Java Runtime Environment):包括核心API、集成API、用戶界面API、發佈技術、Java虛擬機(JVM)。

◆ 開發環境(Java Development Kit):包括編譯Java程序的編譯器(即javac命令)。

在JDK1.0時代,JDK除了AWT(一種用於開發圖形用戶界面的API)外,其它的庫並不完整。

JDK1.1

接着,Sun在1997年2月18日發佈了JDK1.1。JDK1.1增長了JIT(即時編譯)編譯器。JIT和傳統的編譯器不一樣:傳統的編譯器是編譯一條,運行完後將其扔掉;而JIT會將常常用到的指令保存在內存中,當下次調用時就不須要從新編譯了。經過這種方式讓JDK在效率上有了較大提高。

但一直以來,Java主要的應用就是網頁上的Applet以及一些移動設備。到了1996年年末,Flash面世了,這是一種更加簡單的動畫設計軟件:使用Flash幾乎無須任何編程語言知識,就能夠作出豐富多彩的動畫。隨後Flash增長了ActionScript編程腳本,Flash逐漸蠶食了Java在網頁上的應用。

從1995年Java的誕生到1998年年末,Java語言雖然成爲了互聯網上普遍使用的編程語言,但它並無找到一個準確的定位,也沒有找到它必須存在的理由。Java語言能夠編寫Applet,而Flash同樣能夠作到,並且更快,開發成本更低。

JDK1.2

直到1998年12月,Sun發佈了Java歷史上最重要的JDK版本:JDK1.2。伴隨JDK1.2一同發佈的還有jsp/servlet、EJB(Enterprise Java Bean)等規範,並將Java分紅了J2EE、J2SE和J2ME三個版本。

◆ J2EE 企業版(Java 2 Platform,Enterprise Edition):Java技術中應用最普遍的部分,J2EE提供了企業應用開發相關的完整解決方案。

◆ J2SE 標準版(Java 2 Platform,Simple Edition):整個Java技術的核心和基礎,它是J2ME和J2EE編程的基礎。

◆ J2ME 微縮版(Java 2 Platform,Micro Edition):主要用於控制移動設備和信息家電等有限存儲的設備。

這標誌着Java已經吹響了向企業、桌面和移動3個領域進軍的號角,標誌着Java已經進入Java 2時代,這個時期也是Java飛速發展的時期。

在Java 2中,Java發生了不少革命性的變化,而這些革命性的變化一直沿用到如今,對Java的發展造成了深遠的影響。直到今天,咱們還常常看到J2EE、J2ME等名稱。

不只如此,JDK1.2還把它的API分紅了三大類:

◆ 核心API:由Sun公司制定的基本的API,全部的Java平臺都應該提供。這就是咱們日常所說的Java核心類庫。

◆ 可選API:這是Sun爲JDK提供的擴充API,這些API因平臺的不一樣而不一樣。

◆ 特殊API:用於知足特殊要求的API。如用於JCA相JCE的第三方加密類庫。

JDK1.4

2002年2月,Sun發佈了JDK歷史上最爲成熟的版本:JDK1.4。此時因爲Compaq、Fujitsu、SAS、Symbian、IBM等公司的參與,使JDK1.4成爲發展最快的一個JDK版本。到JDK1.4爲止,咱們已經可使用Java實現大多數的應用了。

在此期間,Java語言在企業應用領域大放異彩,涌現出大量基於Java語言的開源框架:Struts、WebWork、Hibemate、Spring等;大量企業應用服務器也開始涌現:WebLogic、WebSphere、JBoss等,這些都標誌着Java語言進入了飛速發展時期。

JDK1.5

2004年10月,Sun發佈了萬衆期待的JDK1.5,同時,Sun將JDK1.5更名爲Java SE 5。J2EE、J2ME也相應地更名Java EE和Java ME。JDK1.5增長了諸如泛型、加強的for語句、可變數量的形參、註釋(Annotations)、自動拆箱和裝箱等功能。同時,也發佈了新的企業級平臺規範如經過註釋等新特性來簡化EJB的複雜性,並推出了EJB 3.0規範。還推出了本身的MVC框架規範:JSF,JSF規範相似於ASP.NET的服務器端控件,經過它能夠快速地構建複雜的JSP界面。

JDK1.6

2006年12月,Sun公司發佈了JDK1.6(也被稱爲Java SE 6)。一直以來,Sun公司維持了大約2年發佈一次JDK新版本的習慣。

但在2009年4月20日,Oracle宣佈將以每股9.5美圓的價格收購Sun,該交易的總價值約爲74億美圓。而Oracle經過收購Sun公司得到了兩項軟件資產:Java和Solaris。

因而曾經表明一個時代的公司:Sun終於被「雨打風吹」去,「江湖」上再也沒有了Sun的身影。多年以來,在新一輩的程序員心中可能會遺忘曾經的Sun公司,但老一輩的程序員們將永久地懷念Sun公司的傳奇。

Sun倒下了,不過Java的大旗依然「獵獵」做響。2007年11月,Google宣佈突出一款基於Linux平臺的的開源手機操做系統:Android。Android的出現順應了即將出現的移動互聯網潮流,並且Android系統的用戶體驗很是好,所以迅速成爲手機操做系統的中堅力量。Android平臺使用了Dalvik虛擬機來運行.dex文件,Dalvik虛擬機的做用相似於JVM虛擬機,只是他並未遵照JVM規範而已。Android使用Java語言來開發應用程序,這也給了Java語言一個新的機會。在過去的歲月中,Java語言做爲服務器端編程語言,已經取得了極大的成功;而Android平臺的流行,則讓Java語言得到了在客戶端程序上大展拳腳的機會。

JDK1.7

2011年7月28日,Oracle公司終於「如約」發不了Java SE 7,此次版本的升級通過了將近5年時間。Java SE 7 也是Oracle發佈的第一個Java版本。Java SE 7雖然並未徹底知足全部人的指望,不過它也加入了很多新特性。

基本概念

特色

◆ 徹底面向對象,動態。

◆ 解釋性,簡單易移植,跨平臺。

◆ 安全健壯,高性能。

◆ 多線程,分佈式。

運行機制

計算機高級語言接程序的執行方式能夠分爲編譯型和解釋型兩種。

Java語言是一種特殊的高級語言,它既具備解釋型語言的特徵,也具備編譯型語言的特徵,由於Java程序要通過先編譯,後解釋兩個步驟。

編譯型語言

編譯型語言是指使用專門的編譯器,針對特定平臺(操做系統)將某種高級語言源代碼一次性「翻譯」成可被該平臺硬件執行的機器碼(包括機器指令和操做數),幷包裝成該平臺所能識別的可執行性程序的格式,這個轉換過程稱爲編譯(Compile)。編譯生成的可執行性程序能夠脫離開發環境,在特定的平臺上獨立運行。有些程序編譯結束後,還可能須要對其餘編譯好的目標代碼進行連接,即組裝兩個以上的目標代碼模塊生成最終的可執行性程序,經過這種方式實現低層次的代碼複用。由於編譯型語言是一次性地編譯成機器碼,因此能夠脫離開發環境獨立運行,並且一般運行效率較高。但由於編譯型語言的程序被編譯成特定平臺上的機器碼,所以編譯生成的可執行性程序一般沒法移植到其餘平臺上運行;若是須要移植,則必須將源代碼複製到特定平臺上,針對特定平臺進行修改,至少也須要採用特定平臺上的編譯器從新編譯。

現有的C、C++、Fortran、Pascal等高級語言都屬於編譯型語言。

解釋型語言

解釋型語言是指使用專門的解釋器對源程序逐行解釋成特定平臺的機器碼並當即執行的語言。解釋型語言一般不會進行總體性的編譯和連接處理,解釋型語言至關於把編譯型語言中的編譯和解釋過程混合到一塊兒同時完成。能夠認爲:每次執行解釋型語言的程序都須要進行一次編譯,所以解釋型語言的程序運行效率一般較低,並且不能脫離解釋器獨立運行。但解釋型語言有一個優點:跨平臺比較容易,只需提供特定平合的解釋器便可,每一個特定平臺上的解釋器負責將源程序解釋成特定平臺的機器指令便可。解釋型語言能夠方便地實現源程序級的移植,但這是以犧牲程序執行效率爲代價的。

現有的Ruby、Python等語言都屬於解釋型語言。

僞編譯型語言

除此以外,還有一種僞編譯型語言,如Visual Basic,它屬於半編譯型語言,並非真正的編譯型語言。它首先被編譯成P-代碼,並將解釋引擎封裝在可執行性程序內,當運行程序時P-代碼會被解析成真正的二進制代碼。表面上看起來,Visual Basic能夠編譯生成可執行性的EXE文件,並且這個EXE文件也能夠脫離開發環境,在特定平臺上運行,很是像編譯型語言。實際上,在這個EXE文件中,既有程序的啓動代碼,也有連接解釋程序的代碼,而這部分代碼負責啓動Visual Basic解釋程序,再對Visual Basic代碼進行解釋並執行。

Java程序的運行機制和JVM

Java程序的運行機制

Java語言比較特殊,由Java語言編寫的程序須要通過編譯步驟,但這個編譯步驟並不會生成特定平臺的機器碼,而是生成一種與平臺無關的字節碼(也就是.class文件)。固然,這種字節碼不是可執行性的,必須使用Java解釋器來解釋執行。所以,咱們能夠認爲:Java語言既是編譯型語言,也是解釋型語言。或者說,Java語言既不是純粹的編譯型語言,也不是純粹的解釋型語言。

Java程序的執行過程必須通過先編譯,後解釋兩個步驟,如圖所示:

JVM

Java語言裏負責解釋執行字節碼文件的是Java虛擬機,即JVM(Java Virtual Machine)。JVM是可運行Java字節碼文件的虛擬計算機。全部平臺上的JVM向編譯器提供相同的編程接口,而編譯器只須要面向虛擬機,生成虛擬機能理解的代碼,而後由虛擬機來解釋執行。在一些虛擬機的實現中,還會將虛擬機代碼轉換成特定系統的機器碼執行,從而提升執行效率。

當使用Java編譯器編譯Java程序時,生成的是與平臺無關的字節碼,這些字節碼不面向任何具體平臺,只面向JVM。不一樣平臺上的JVM都是不一樣的,但它們都提供了相同的接口。JVM是Java程序跨平臺的關鍵部分,只要爲不一樣平臺實現了相應的虛擬機,編譯後的Java字節碼就能夠在該平臺上運行。顯然,相同的字節碼程序須要在不一樣的平臺上運行,這幾乎是「不可能的」,只有經過中間的轉換器才能夠實現,JVM就是這個轉換器。

JVM是一個抽象的計算機,和實際的計算機同樣,它具備指令集並使用不一樣的存儲區域。它負責執行指令,還要管理數據、內存和寄存器。

理解JVM

JVM的做用很容易理解,就像同一個插座,須要給兩個不一樣接口的手機充電,這就須要爲這兩個手機分別提供一個充電器。這個充電器:

◆ 向上的接口相同,用於適應同一個插座;

◆ 向下的接口不一樣,用於適應兩個不一樣的手機。

在這個類比中,咱們能夠近似的理解兩個不一樣的手機就是不一樣的操做系統,而同一個插座就是Java字節碼程序,充電器角色則對應JVM。相似地,咱們也能夠認爲JVM分爲向上和向下兩個部分,全部平臺上的JVM:

◆ 向上提供給Java字節碼程序的接口徹底相同;

◆ 向下適應不一樣平臺的接口則互不相同。

規範

Sun公司制定的Java虛擬機規範,在技術上規定了JVM的統一標準,具體定義了JVM的以下細節:

◆ 指今集

◆ 寄存器

◆ 類文件的格式

◆ 棧

◆ 存儲區

Sun公司制定這些規範的目的是爲了提供統一的標準,最終實現Java程序的平臺無關性。

相關文章
相關標籤/搜索