Java
(計(jì)算機(jī)編程語言)
JavaEE:12天掌握J(rèn)ava語言開發(fā) - Java-環(huán)境搭建及基礎(chǔ)語法 - 創(chuàng)客學(xué)院直播室
Java是一門面向?qū)ο缶幊陶Z言桑寨,不僅吸收了C++語言的各種優(yōu)點(diǎn)瓶蚂,還摒棄了C++里難以理解的多繼承蛾娶、指針等概念,因此Java語言具有功能強(qiáng)大和簡(jiǎn)單易用兩個(gè)特征腺晾。Java語言作為靜態(tài)面向?qū)ο缶幊陶Z言的代表工猜,極好地實(shí)現(xiàn)了面向?qū)ο罄碚摚试S程序員以優(yōu)雅的思維方式進(jìn)行復(fù)雜的編程 肛著。Java具有簡(jiǎn)單性圆兵、面向?qū)ο蟆⒎植际绞嗷摺⒔研匝撑踩浴⑵脚_(tái)獨(dú)立與可移植性局荚、多線程超凳、動(dòng)態(tài)性等特點(diǎn) [2] 。Java可以編寫桌面應(yīng)用程序耀态、Web應(yīng)用程序轮傍、分布式系統(tǒng)和嵌入式系統(tǒng)應(yīng)用程序等。
發(fā)展歷程
20世紀(jì)90年代首装,硬件領(lǐng)域出現(xiàn)了單片式計(jì)算機(jī)系統(tǒng)创夜,這種價(jià)格低廉的系統(tǒng)一出現(xiàn)就立即引起了自動(dòng)控制領(lǐng)域人員的注意,因?yàn)槭褂盟梢源蠓忍嵘M(fèi)類電子產(chǎn)品(如電視機(jī)頂盒仙逻、面包烤箱驰吓、移動(dòng)電話等)的智能化程度。Sun公司為了搶占市場(chǎng)先機(jī)桨醋,在1991年成立了一個(gè)稱為Green的項(xiàng)目小組棚瘟,帕特里克现斋、詹姆斯·高斯林喜最、麥克·舍林丹和其他幾個(gè)工程師一起組成的工作小組在加利福尼亞州門洛帕克市沙丘路的一個(gè)小工作室里面研究開發(fā)新技術(shù),專攻計(jì)算機(jī)在家電產(chǎn)品上的嵌入式應(yīng)用庄蹋。
由于C++所具有的優(yōu)勢(shì)瞬内,該項(xiàng)目組的研究人員首先考慮采用C++來編寫程序。但對(duì)于硬件資源極其匱乏的單片式系統(tǒng)來說限书,C++程序過于復(fù)雜和龐大虫蝶。另外由于消費(fèi)電子產(chǎn)品所采用的嵌入式處理器芯片的種類繁雜,如何讓編寫的程序跨平臺(tái)運(yùn)行也是個(gè)難題倦西。為了解決困難能真,他們首先著眼于語言的開發(fā),假設(shè)了一種結(jié)構(gòu)簡(jiǎn)單扰柠、符合嵌入式應(yīng)用需要的硬件平臺(tái)體系結(jié)構(gòu)并為其制定了相應(yīng)的規(guī)范粉铐,其中就定義了這種硬件平臺(tái)的二進(jìn)制機(jī)器碼指令系統(tǒng)(即后來成為“字節(jié)碼”的指令系統(tǒng)),以待語言開發(fā)成功后卤档,能有半導(dǎo)體芯片生產(chǎn)商開發(fā)和生產(chǎn)這種硬件平臺(tái)蝙泼。對(duì)于新語言的設(shè)計(jì),Sun公司研發(fā)人員并沒有開發(fā)一種全新的語言劝枣,而是根據(jù)嵌入式軟件的要求汤踏,對(duì)C++進(jìn)行了改造织鲸,去除了留在C++的一些不太實(shí)用及影響安全的成分,并結(jié)合嵌入式系統(tǒng)的實(shí)時(shí)性要求溪胶,開發(fā)了一種稱為Oak的面向?qū)ο笳Z言搂擦。
由于在開發(fā)Oak語言時(shí),尚且不存在運(yùn)行字節(jié)碼的硬件平臺(tái)载荔,所以為了在開發(fā)時(shí)可以對(duì)這種語言進(jìn)行實(shí)驗(yàn)研究盾饮,他們就在已有的硬件和軟件平臺(tái)基礎(chǔ)上,按照自己所指定的規(guī)范懒熙,用軟件建設(shè)了一個(gè)運(yùn)行平臺(tái)丘损,整個(gè)系統(tǒng)除了比C++更加簡(jiǎn)單之外,沒有什么大的區(qū)別工扎。1992年的夏天徘钥,當(dāng)Oak語言開發(fā)成功后,研究者們向硬件生產(chǎn)商進(jìn)行演示了Green操作系統(tǒng)肢娘、Oak的程序設(shè)計(jì)語言呈础、類庫和其硬件,以說服他們使用Oak語言生產(chǎn)硬件芯片橱健,但是而钞,硬件生產(chǎn)商并未對(duì)此產(chǎn)生極大的熱情。因?yàn)樗麄冋J(rèn)為拘荡,在所有人對(duì)Oak語言還一無所知的情況下臼节,就生產(chǎn)硬件產(chǎn)品的風(fēng)險(xiǎn)實(shí)在太大了,所以O(shè)ak語言也就因?yàn)槿狈τ布闹С侄鵁o法進(jìn)入市場(chǎng)珊皿,從而被擱置了下來网缝。
1994年6、7月間蟋定,在經(jīng)歷了一場(chǎng)歷時(shí)三天的討論之后粉臊,團(tuán)隊(duì)決定再一次改變了努力的目標(biāo),這次他們決定將該技術(shù)應(yīng)用于萬維網(wǎng)驶兜。他們認(rèn)為隨著Mosaic瀏覽器的到來扼仲,因特網(wǎng)正在向同樣的高度互動(dòng)的遠(yuǎn)景演變,而這一遠(yuǎn)景正是他們?cè)谟芯€電視網(wǎng)中看到的抄淑。作為原型屠凶,帕特里克·諾頓寫了一個(gè)小型萬維網(wǎng)瀏覽器WebRunner。1995年蝇狼,互聯(lián)網(wǎng)的蓬勃發(fā)展給了Oak機(jī)會(huì)阅畴。業(yè)界為了使死板、單調(diào)的靜態(tài)網(wǎng)頁能夠“靈活”起來迅耘,急需一種軟件技術(shù)來開發(fā)一種程序贱枣,這種程序可以通過網(wǎng)絡(luò)傳播并且能夠跨平臺(tái)運(yùn)行监署。于是,世界各大IT企業(yè)為此紛紛投入了大量的人力纽哥、物力和財(cái)力钠乏。這個(gè)時(shí)候,Sun公司想起了那個(gè)被擱置起來很久的Oak春塌,并且重新審視了那個(gè)用軟件編寫的試驗(yàn)平臺(tái)晓避,由于它是按照嵌入式系統(tǒng)硬件平臺(tái)體系結(jié)構(gòu)進(jìn)行編寫的,所以非常小只壳,特別適用于網(wǎng)絡(luò)上的傳輸系統(tǒng)俏拱,而Oak也是一種精簡(jiǎn)的語言,程序非常小吼句,適合在網(wǎng)絡(luò)上傳輸锅必。Sun公司首先推出了可以嵌入網(wǎng)頁并且可以隨同網(wǎng)頁在網(wǎng)絡(luò)上傳輸?shù)腁pplet(Applet是一種將小程序嵌入到網(wǎng)頁中進(jìn)行執(zhí)行的技術(shù)),并將Oak更名為Java(在申請(qǐng)注冊(cè)商標(biāo)時(shí)惕艳,發(fā)現(xiàn)Oak已經(jīng)被人使用了搞隐,再想了一系列名字之后,最終远搪,使用了提議者在喝一杯Java咖啡時(shí)無意提到的Java詞語)劣纲。5月23日,Sun公司在Sun world會(huì)議上正式發(fā)布Java和HotJava瀏覽器谁鳍。IBM癞季、Apple、DEC棠耕、Adobe余佛、HP柠新、Oracle窍荧、Netscape和微軟等各大公司都紛紛停止了自己的相關(guān)開發(fā)項(xiàng)目,競(jìng)相購買了Java使用許可證恨憎,并為自己的產(chǎn)品開發(fā)了相應(yīng)的Java平臺(tái)蕊退。
1996年1月,Sun公司發(fā)布了Java的第一個(gè)開發(fā)工具包(JDK 1.0)憔恳,這是Java發(fā)展歷程中的重要里程碑瓤荔,標(biāo)志著Java成為一種獨(dú)立的開發(fā)工具。9月钥组,約8.3萬個(gè)網(wǎng)頁應(yīng)用了Java技術(shù)來制作输硝。10月,Sun公司發(fā)布了Java平臺(tái)的第一個(gè)即時(shí)(JIT)編譯器程梦。1997年2月点把,JDK 1.1面世橘荠,在隨后的3周時(shí)間里,達(dá)到了22萬次的下載量郎逃。4月2日哥童,Java One會(huì)議召開,參會(huì)者逾一萬人褒翰,創(chuàng)當(dāng)時(shí)全球同類會(huì)議規(guī)模之紀(jì)錄贮懈。9月,Java Developer Connection社區(qū)成員超過10萬优训。1998年12月8日朵你,第二代Java平臺(tái)的企業(yè)版J2EE發(fā)布。1999年6月揣非,Sun公司發(fā)布了第二代Java平臺(tái)(簡(jiǎn)稱為Java2)的3個(gè)版本:J2ME(Java2 Micro Edition撬呢,Java2平臺(tái)的微型版),應(yīng)用于移動(dòng)妆兑、無線及有限資源的環(huán)境魂拦;J2SE(Java 2 Standard Edition,Java 2平臺(tái)的標(biāo)準(zhǔn)版)搁嗓,應(yīng)用于桌面環(huán)境芯勘;J2EE(Java 2Enterprise Edition,Java 2平臺(tái)的企業(yè)版)腺逛,應(yīng)用于基于Java的應(yīng)用服務(wù)器荷愕。Java 2平臺(tái)的發(fā)布,是Java發(fā)展過程中最重要的一個(gè)里程碑棍矛,標(biāo)志著Java的應(yīng)用開始普及安疗。1999年4月27日,HotSpot虛擬機(jī)發(fā)布够委。HotSpot虛擬機(jī)發(fā)布時(shí)是作為JDK 1.2的附加程序提供的荐类,后來它成為了JDK 1.3及之后所有版本的Sun JDK的默認(rèn)虛擬機(jī)。
布茁帽,幾周后其獲得了Apple公司Mac OS X的工業(yè)標(biāo)準(zhǔn)的支持玉罐。2001年9月24日,J2EE1.3發(fā)布潘拨。2002年2月26日吊输,J2SE1.4發(fā)布。自此Java的計(jì)算能力有了大幅提升铁追,與J2SE1.3相比季蚂,其多了近62%的類和接口。在這些新特性當(dāng)中,還提供了廣泛的XML支持扭屁、安全套接字(Socket)支持(通過SSL與TLS協(xié)議)透硝、全新的I/OAPI、正則表達(dá)式疯搅、日志與斷言濒生。2004年9月30日,J2SE1.5發(fā)布幔欧,成為Java語言發(fā)展史上的又一里程碑罪治。為了表示該版本的重要性,J2SE 1.5更名為Java SE 5.0(內(nèi)部版本號(hào)1.5.0)礁蔗,代號(hào)為“Tiger”觉义,Tiger包含了從1996年發(fā)布1.0版本以來的最重大的更新,其中包括泛型支持浴井、基本類型的自動(dòng)裝箱晒骇、改進(jìn)的循環(huán)、枚舉類型磺浙、格式化I/O及可變參數(shù)洪囤。2005年6月,在Java One大會(huì)上撕氧,Sun公司發(fā)布了Java SE 6瘤缩。此時(shí),Java的各種版本已經(jīng)更名伦泥,已取消其中的數(shù)字2剥啤,如J2EE更名為JavaEE,J2SE更名為JavaSE不脯,J2ME更名為JavaME府怯。2006年11月13日,Java技術(shù)的發(fā)明者Sun公司宣布防楷,將Java技術(shù)作為免費(fèi)軟件對(duì)外發(fā)布牺丙。Sun公司正式發(fā)布的有關(guān)Java平臺(tái)標(biāo)準(zhǔn)版的第一批源代碼,以及Java迷你版的可執(zhí)行源代碼域帐。從2007年3月起赘被,全世界所有的開發(fā)人員均可對(duì)Java源代碼進(jìn)行修改 是整。2009年肖揣,甲骨文公司宣布收購Sun。2010年浮入,Java編程語言的共同創(chuàng)始人之一詹姆斯·高斯林從Oracle公司辭職龙优。2011年,甲骨文公司舉行了全球性的活動(dòng),以慶祝Java7的推出彤断,隨后Java7正式發(fā)布野舶。2014年,甲骨文公司發(fā)布了Java8正式版宰衙。
編程開發(fā)
編程環(huán)境
JDK(Java Development Kit)稱為Java開發(fā)包或Java開發(fā)工具平道,是一個(gè)編寫Java的Applet小程序和應(yīng)用程序的程序開發(fā)環(huán)境。JDK是整個(gè)Java的核心供炼,包括了Java運(yùn)行環(huán)境(Java Runtime Environment)一屋,一些Java工具和Java的核心類庫(Java API)。不論什么Java應(yīng)用服務(wù)器實(shí)質(zhì)都是內(nèi)置了某個(gè)版本的JDK袋哼。主流的JDK是Sun公司發(fā)布的JDK冀墨,除了Sun之外,還有很多公司和組織都開發(fā)了自己的JDK涛贯,例如诽嘉,IBM公司開發(fā)的JDK,BEA公司的Jrocket弟翘,還有GNU組織開發(fā)的JDK 虫腋。另外,可以把Java API類庫中的Java SE API子集和Java虛擬機(jī)這兩部分統(tǒng)稱為JRE(JAVA Runtime Environment)稀余,JRE是支持Java程序運(yùn)行的標(biāo)準(zhǔn)環(huán)境 岔乔。JRE是個(gè)運(yùn)行環(huán)境,JDK是個(gè)開發(fā)環(huán)境滚躯。因此寫Java程序的時(shí)候需要JDK雏门,而運(yùn)行Java程序的時(shí)候就需要JRE。而JDK里面已經(jīng)包含了JRE掸掏,因此只要安裝了JDK茁影,就可以編輯Java程序,也可以正常運(yùn)行Java程序丧凤。但由于JDK包含了許多與運(yùn)行無關(guān)的內(nèi)容募闲,占用的空間較大,因此運(yùn)行普通的Java程序無須安裝JDK愿待,而只需要安裝JRE即可浩螺。
編程工具
Eclipse:一個(gè)開放源代碼的、基于Java的可擴(kuò)展開發(fā)平臺(tái) 仍侥。NetBeans:開放源碼的Java集成開發(fā)環(huán)境要出,適用于各種客戶機(jī)和Web應(yīng)用。IntelliJ IDEA:在代碼自動(dòng)提示农渊、代碼分析等方面的具有很好的功能患蹂。MyEclipse:由Genuitec公司開發(fā)的一款商業(yè)化軟件,是應(yīng)用比較廣泛的Java應(yīng)用程序集成開發(fā)環(huán)境 。EditPlus:如果正確配置Java的編譯器“Javac”以及解釋器“Java”后传于,可直接使用EditPlus編譯執(zhí)行Java程序囱挑。
語言特點(diǎn)
1.簡(jiǎn)單性Java看起來設(shè)計(jì)得很像C++,但是為了使語言小和容易熟悉沼溜,設(shè)計(jì)者們把C++語言中許多可用的特征去掉了平挑,這些特征是一般程序員很少使用的。例如系草,Java不支持go to語句弹惦,代之以提供break和continue語句以及異常處理。Java還剔除了C++的操作符過載(overload)和多繼承特征悄但,并且不使用主文件棠隐,免去了預(yù)處理程序。因?yàn)镴ava沒有結(jié)構(gòu)檐嚣,數(shù)組和串都是對(duì)象助泽,所以不需要指針。Java能夠自動(dòng)處理對(duì)象的引用和間接引用嚎京,實(shí)現(xiàn)自動(dòng)的無用單元收集嗡贺,使用戶不必為存儲(chǔ)管理問題煩惱,能更多的時(shí)間和精力花在研發(fā)上鞍帝。2.面向?qū)ο驤ava是一個(gè)面向?qū)ο蟮恼Z言诫睬。對(duì)程序員來說,這意味著要注意應(yīng)中的數(shù)據(jù)和操縱數(shù)據(jù)的方法(method)帕涌,而不是嚴(yán)格地用過程來思考摄凡。在一個(gè)面向?qū)ο蟮南到y(tǒng)中,類(class)是數(shù)據(jù)和操作數(shù)據(jù)的方法的集合蚓曼。數(shù)據(jù)和方法一起描述對(duì)象(object)的狀態(tài)和行為亲澡。每一對(duì)象是其狀態(tài)和行為的封裝。類是按一定體系和層次安排的纫版,使得子類可以從超類繼承行為床绪。在這個(gè)類層次體系中有一個(gè)根類,它是具有一般行為的類其弊。Java程序是用類來組織的癞己。Java還包括一個(gè)類的擴(kuò)展集合,分別組成各種程序包(Package)梭伐,用戶可以在自己的程序中使用痹雅。例如,Java提供產(chǎn)生圖形用戶接口部件的類(java.awt包)籽御,這里awt是抽象窗口工具集(abstract windowing toolkit)的縮寫练慕,處理輸入輸出的類(http://java.io包)和支持網(wǎng)絡(luò)功能的類(http://java.net包)惰匙。3.分布性Java設(shè)計(jì)成支持在網(wǎng)絡(luò)上應(yīng)用技掏,它是分布式語言铃将。Java既支持各種層次的網(wǎng)絡(luò)連接,又以Socket類支持可靠的流(stream)網(wǎng)絡(luò)連接哑梳,所以用戶可以產(chǎn)生分布式的客戶機(jī)和服務(wù)器劲阎。網(wǎng)絡(luò)變成軟件應(yīng)用的分布運(yùn)載工具。Java程序只要編寫一次鸠真,就可到處運(yùn)行悯仙。4.編譯和解釋性Java編譯程序生成字節(jié)碼(byte-code),而不是通常的機(jī)器碼吠卷。Java字節(jié)碼提供對(duì)體系結(jié)構(gòu)中性的目標(biāo)文件格式锡垄,代碼設(shè)計(jì)成可有效地傳送程序到多個(gè)平臺(tái)。Java程序可以在任何實(shí)現(xiàn)了Java解釋程序和運(yùn)行系統(tǒng)(run-time system)的系統(tǒng)上運(yùn)行祭隔。在一個(gè)解釋性的環(huán)境中货岭,程序開發(fā)的標(biāo)準(zhǔn)“鏈接”階段大大消失了。如果說Java還有一個(gè)鏈接階段疾渴,它只是把新類裝進(jìn)環(huán)境的過程千贯,它是增量式的、輕量級(jí)的過程搞坝。因此搔谴,Java支持快速原型和容易試驗(yàn),它將導(dǎo)致快速程序開發(fā)桩撮。這是一個(gè)與傳統(tǒng)的敦第、耗時(shí)的“編譯、鏈接和測(cè)試”形成鮮明對(duì)比的精巧的開發(fā)過程店量。
5.穩(wěn)健性Java原來是用作編寫消費(fèi)類家用電子產(chǎn)品軟件的語言申尼,所以它是被設(shè)計(jì)成寫高可靠和穩(wěn)健軟件的学搜。Java消除了某些編程錯(cuò)誤衬潦,使得用它寫可靠軟件相當(dāng)容易。Java是一個(gè)強(qiáng)類型語言抹凳,它允許擴(kuò)展編譯時(shí)檢查潛在類型不匹配問題的功能诬滩。Java要求顯式的方法聲明霹粥,它不支持C風(fēng)格的隱式聲明。這些嚴(yán)格的要求保證編譯程序能捕捉調(diào)用錯(cuò)誤疼鸟,這就導(dǎo)致更可靠的程序后控。可靠性方面最重要的增強(qiáng)之一是Java的存儲(chǔ)模型空镜。Java不支持指針浩淘,它消除重寫存儲(chǔ)和訛誤數(shù)據(jù)的可能性捌朴。類似地,Java自動(dòng)的“無用單元收集”預(yù)防存儲(chǔ)漏泄和其它有關(guān)動(dòng)態(tài)存儲(chǔ)分配和解除分配的有害錯(cuò)誤张抄。Java解釋程序也執(zhí)行許多運(yùn)行時(shí)的檢查砂蔽,諸如驗(yàn)證所有數(shù)組和串訪問是否在界限之內(nèi)。異常處理是Java中使得程序更穩(wěn)健的另一個(gè)特征署惯。異常是某種類似于錯(cuò)誤的異常條件出現(xiàn)的信號(hào)左驾。使用try/catch/finally語句,程序員可以找到出錯(cuò)的處理代碼极谊,這就簡(jiǎn)化了出錯(cuò)處理和恢復(fù)的任務(wù)诡右。6.安全性Java的存儲(chǔ)分配模型是它防御惡意代碼的主要方法之一。Java沒有指針轻猖,所以程序員不能得到隱蔽起來的內(nèi)幕和偽造指針去指向存儲(chǔ)器帆吻。更重要的是,Java編譯程序不處理存儲(chǔ)安排決策咙边,所以程序員不能通過查看聲明去猜測(cè)類的實(shí)際存儲(chǔ)安排猜煮。編譯的Java代碼中的存儲(chǔ)引用在運(yùn)行時(shí)由Java解釋程序決定實(shí)際存儲(chǔ)地址。Java運(yùn)行系統(tǒng)使用字節(jié)碼驗(yàn)證過程來保證裝載到網(wǎng)絡(luò)上的代碼不違背任何Java語言限制样眠。這個(gè)安全機(jī)制部分包括類如何從網(wǎng)上裝載友瘤。例如,裝載的類是放在分開的名字空間而不是局部類檐束,預(yù)防惡意的小應(yīng)用程序用它自己的版本來代替標(biāo)準(zhǔn)Java類辫秧。7.可移植性Java使得語言聲明不依賴于實(shí)現(xiàn)的方面。例如被丧,Java顯式說明每個(gè)基本數(shù)據(jù)類型的大小和它的運(yùn)算行為(這些數(shù)據(jù)類型由Java語法描述)盟戏。Java環(huán)境本身對(duì)新的硬件平臺(tái)和操作系統(tǒng)是可移植的。Java編譯程序也用Java編寫甥桂,而Java運(yùn)行系統(tǒng)用ANSIC語言編寫柿究。8.高性能Java是一種先編譯后解釋的語言,所以它不如全編譯性語言快黄选。但是有些情況下性能是很要緊的蝇摸,為了支持這些情況,Java設(shè)計(jì)者制作了“及時(shí)”編譯程序办陷,它能在運(yùn)行時(shí)把Java字節(jié)碼翻譯成特定CPU(中央處理器)的機(jī)器代碼貌夕,也就是實(shí)現(xiàn)全編譯了。Java字節(jié)碼格式設(shè)計(jì)時(shí)考慮到這些“及時(shí)”編譯程序的需要民镜,所以生成機(jī)器代碼的過程相當(dāng)簡(jiǎn)單啡专,它能產(chǎn)生相當(dāng)好的代碼。9.多線程性Java是多線程語言制圈,它提供支持多線程的執(zhí)行(也稱為輕便過程)们童,能處理不同任務(wù)畔况,使具有線索的程序設(shè)計(jì)很容易。Java的lang包提供一個(gè)Thread類慧库,它支持開始線索跷跪、運(yùn)行線索、停止線索和檢查線索狀態(tài)的方法完沪。Java的線索支持也包括一組同步原語域庇。這些原語是基于監(jiān)督程序和條件變量風(fēng)范嵌戈,由C.A.R.Haore開發(fā)的廣泛使用的同步化方案覆积。用關(guān)鍵詞synchronized,程序員可以說明某些方法在一個(gè)類中不能并發(fā)地運(yùn)行熟呛。這些方法在監(jiān)督程序控制之下宽档,確保變量維持在一個(gè)一致的狀態(tài)。10.動(dòng)態(tài)性Java語言設(shè)計(jì)成適應(yīng)于變化的環(huán)境庵朝,它是一個(gè)動(dòng)態(tài)的語言吗冤。例如,Java中的類是根據(jù)需要載入的九府,甚至有些是通過網(wǎng)絡(luò)獲取的椎瘟。