![全書(shū)教學(xué)課件:Java程序設(shè)計(jì)案例教程_第1頁(yè)](http://file4.renrendoc.com/view6/M00/02/0B/wKhkGWeZCD-AZXYDAAFCnFvBY_Q213.jpg)
![全書(shū)教學(xué)課件:Java程序設(shè)計(jì)案例教程_第2頁(yè)](http://file4.renrendoc.com/view6/M00/02/0B/wKhkGWeZCD-AZXYDAAFCnFvBY_Q2132.jpg)
![全書(shū)教學(xué)課件:Java程序設(shè)計(jì)案例教程_第3頁(yè)](http://file4.renrendoc.com/view6/M00/02/0B/wKhkGWeZCD-AZXYDAAFCnFvBY_Q2133.jpg)
![全書(shū)教學(xué)課件:Java程序設(shè)計(jì)案例教程_第4頁(yè)](http://file4.renrendoc.com/view6/M00/02/0B/wKhkGWeZCD-AZXYDAAFCnFvBY_Q2134.jpg)
![全書(shū)教學(xué)課件:Java程序設(shè)計(jì)案例教程_第5頁(yè)](http://file4.renrendoc.com/view6/M00/02/0B/wKhkGWeZCD-AZXYDAAFCnFvBY_Q2135.jpg)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第1章Java語(yǔ)言概述第1頁(yè)本章概述本章的學(xué)習(xí)目標(biāo)主要內(nèi)容本章概述Java是一種跨平臺(tái)的面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言,自問(wèn)世以來(lái),受到越來(lái)越多開(kāi)發(fā)者的喜愛(ài)。它不僅吸收了C++語(yǔ)言的各種優(yōu)點(diǎn),而且摒棄了C++里難以理解的多繼承、指針等概念,因此Java語(yǔ)言具有功能強(qiáng)大和簡(jiǎn)單易用等特征。本章將從Java的起源講起,詳細(xì)介紹Java的發(fā)展歷程、Java的特點(diǎn)以及開(kāi)發(fā)環(huán)境的搭建,并創(chuàng)建一個(gè)簡(jiǎn)單的HelloWorld程序。第2頁(yè)本章的學(xué)習(xí)目標(biāo)了解Java的發(fā)展史理解Java語(yǔ)言的特點(diǎn)掌握J(rèn)ava程序的運(yùn)行機(jī)制掌握J(rèn)DK的安裝與配置掌握在Eclipse中新建Java工程熟悉Eclipse的常用操作第3頁(yè)第4頁(yè)主要內(nèi)容1.1Java的起源與發(fā)展史
1.2Java的特點(diǎn) 1.3Java虛擬機(jī) 1.4下載并安裝JDK 1.5使用Eclipse開(kāi)發(fā)Java程序 1.6本章小結(jié) 1.7思考和練習(xí)
1.1Java的起源與發(fā)展史Java是由Sun公司于1995年推出,在Java語(yǔ)言出現(xiàn)以前,很難想象在Window環(huán)境下編寫(xiě)的程序可以不加修改就在Linux系統(tǒng)中運(yùn)行,因?yàn)橛?jì)算機(jī)硬件只識(shí)別機(jī)器指令,而不同操作系統(tǒng)中的機(jī)器指令是有所不同的,所以,要把一種平臺(tái)下的程序遷移到另一個(gè)平臺(tái),必須要針對(duì)目標(biāo)平臺(tái)進(jìn)行修改,如果想要程序運(yùn)行在不同的操作系統(tǒng),就要求程序設(shè)計(jì)語(yǔ)言能夠跨平臺(tái),可以跨越不同的硬件、軟件環(huán)境,而Java語(yǔ)言就能夠滿足這種要求。第5頁(yè)程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)語(yǔ)言(ProgramDesignLanguage,PDL)又稱為編程語(yǔ)言,是一組用來(lái)定義計(jì)算機(jī)程序的語(yǔ)法規(guī)則。語(yǔ)言的基礎(chǔ)是一組記號(hào)和一組規(guī)則,根據(jù)規(guī)則由記號(hào)構(gòu)成的記號(hào)串的總體就是語(yǔ)言。在程序設(shè)計(jì)語(yǔ)言中,這些記號(hào)串就是程序。從發(fā)展歷程來(lái)看,程序設(shè)計(jì)語(yǔ)言可以分為4類。機(jī)器語(yǔ)言:由二進(jìn)制0、1代碼指令構(gòu)成。匯編語(yǔ)言:機(jī)器指令的符號(hào)化,與機(jī)器指令存在著直接的對(duì)應(yīng)關(guān)系,所以匯編語(yǔ)言同樣存在著難學(xué)難用、容易出錯(cuò)、維護(hù)困難等缺點(diǎn)。高級(jí)語(yǔ)言:面向用戶的、基本上獨(dú)立于計(jì)算機(jī)種類和結(jié)構(gòu)的語(yǔ)言。非過(guò)程化語(yǔ)言:面向應(yīng)用,為最終用戶設(shè)計(jì)的一類程序設(shè)計(jì)語(yǔ)言。第6頁(yè)Java的家世Java繼承了C和C++語(yǔ)言的許多優(yōu)點(diǎn)。C語(yǔ)言的誕生震驚了計(jì)算機(jī)界,因?yàn)樗鼜母旧细淖兞司幊痰姆绞胶退枷?。在C語(yǔ)言以前,程序員通常需要在品質(zhì)不同的各種計(jì)算機(jī)語(yǔ)言之間進(jìn)行選擇。從20世紀(jì)70年代晚期到80年代早期,C語(yǔ)言成為主要的計(jì)算機(jī)編程語(yǔ)言,并且在今天仍然被廣泛使用。到了20世紀(jì)80年代早期,許多項(xiàng)目超出了結(jié)構(gòu)化方法的極限。為了解決這一問(wèn)題,發(fā)明了一種新的編程方法,稱為面向?qū)ο缶幊?Object-OrientedProgramming,OOP)。第7頁(yè)Java的家世隨著面向?qū)ο缶幊趟枷氲某霈F(xiàn),C語(yǔ)言作為一種面向過(guò)程的語(yǔ)言,已經(jīng)不能滿足面向?qū)ο箝_(kāi)發(fā)的需要。C++便是在C語(yǔ)言的基礎(chǔ)之上為支持面向?qū)ο蟮某绦蛟O(shè)計(jì)而設(shè)計(jì)的。C++語(yǔ)言的主要特點(diǎn)表現(xiàn)在兩個(gè)方面:一是全面兼容C,二是支持面向?qū)ο蟮姆椒ā5搅?0世紀(jì)80年代末90年代初,使用面向?qū)ο缶幊痰腃++語(yǔ)言占據(jù)了主導(dǎo)地位。因?yàn)镃++既支持面向?qū)ο缶幊棠J?,又具有C語(yǔ)言的高效率以及風(fēng)格優(yōu)點(diǎn),它確實(shí)是一種可以用于創(chuàng)建各種程序的語(yǔ)言。然而,就像過(guò)去一樣,推動(dòng)計(jì)算機(jī)語(yǔ)言向前演變的力量又一次在醞釀。在短短的幾年中,萬(wàn)維網(wǎng)(WorldWideWeb)和Internet達(dá)到了臨界規(guī)模。這一事件又將會(huì)促成編程的另一場(chǎng)革命。第8頁(yè)Java的誕生Java是由JamesGosling、PatrickNaughton、ChrisWarth、EdFrank和MikeSheridan于1991年在Sun公司構(gòu)想出來(lái)的。這種語(yǔ)言最初稱為Oak,是Sun公司為一些消費(fèi)性電子產(chǎn)品而設(shè)計(jì)的一個(gè)通用環(huán)境。當(dāng)Sun公司1995年正式以Java這個(gè)名字推出的時(shí)候,幾乎所有的Web開(kāi)發(fā)人員都想到:噢,這正是我想要的。于是Java成了一顆耀眼的明星,隨著互聯(lián)網(wǎng)的發(fā)展,Java被推到計(jì)算機(jī)語(yǔ)言設(shè)計(jì)的最前沿。Java從C和C++繼承了許多特性,這是有意而為之。使用與C語(yǔ)言類似的語(yǔ)法以及模仿C++的面向?qū)ο筇匦?,可以使Java語(yǔ)言對(duì)于眾多經(jīng)驗(yàn)豐富的C/C++程序員更具吸引力。第9頁(yè)Java的發(fā)展歷程1.Java1.x1996年1月,Sun公司發(fā)布了Java的第一個(gè)開(kāi)發(fā)工具包(JDK1.0),這是Java發(fā)展歷程中的重要里程碑,標(biāo)志著Java成為一種獨(dú)立的開(kāi)發(fā)工具。9月,約8.3萬(wàn)個(gè)網(wǎng)頁(yè)應(yīng)用了Java技術(shù)來(lái)制作。10月,Sun公司發(fā)布了Java平臺(tái)的第一個(gè)即時(shí)(JIT)編譯器。在JDK1.0發(fā)布不久,Java的設(shè)計(jì)人員就著手創(chuàng)建下一個(gè)版本。1997年2月,JDK1.1面世,新版本添加了許多新的庫(kù)元素,改進(jìn)了事件處理方式,并且重新配置了JDK1.0中庫(kù)的許多特性,也去掉了最初版本中的一些特性。第10頁(yè)Java的發(fā)展歷程2.Java21998年12月8日,第二代Java平臺(tái)的企業(yè)版J2EE發(fā)布。1999年6月,Sun公司發(fā)布了第二代Java平臺(tái)(簡(jiǎn)稱為Java2)的3個(gè)版本:J2ME(Java2MicroEdition,Java2平臺(tái)的微型版),應(yīng)用于移動(dòng)、無(wú)線及有限資源的環(huán)境;J2SE(Java2StandardEdition,Java2平臺(tái)的標(biāo)準(zhǔn)版),應(yīng)用于桌面環(huán)境;J2EE(Java2EnterpriseEdition,Java2平臺(tái)的企業(yè)版),應(yīng)用于基于Java的應(yīng)用服務(wù)器。Java2平臺(tái)的發(fā)布,是Java發(fā)展過(guò)程中最重要的一個(gè)里程碑,標(biāo)志著Java的應(yīng)用開(kāi)始普及。2000年5月,JDK1.3、JDK1.4和J2SE1.3相繼發(fā)布,幾周后其獲得了Apple公司MacOSX的工業(yè)標(biāo)準(zhǔn)的支持。J2SE1.3是對(duì)Java2原始版本的第一次重要升級(jí)。這次升級(jí)主要是更新Java的現(xiàn)有功能以及“限制”開(kāi)發(fā)環(huán)境。2001年9月24日,J2EE1.3發(fā)布。2002年2月26日,J2SE1.4發(fā)布。J2SE1.4進(jìn)一步增強(qiáng)了Java,這個(gè)發(fā)布版本包含了一些重要的升級(jí)、改進(jìn)和新增功能。自此Java的計(jì)算能力有了大幅提升。第11頁(yè)Java的發(fā)展歷程3.J2SE5J2SE1.4之后的下一個(gè)發(fā)布版本是J2SE5(內(nèi)部版本號(hào)1.5.0),該版本也是革命性的。于2004年9月30日發(fā)布,成為Java語(yǔ)言發(fā)展史上的又一里程碑。它與先前的大多數(shù)Java升級(jí)不同,因?yàn)槟切┥?jí)提供了重要、但是有規(guī)律的改進(jìn),而J2SE5從根本上擴(kuò)展了Java語(yǔ)言的應(yīng)用領(lǐng)域、功能和范圍。第12頁(yè)Java的發(fā)展歷程4.JavaSE62005年6月,Sun公司發(fā)布了JavaSE6,內(nèi)部的開(kāi)發(fā)版本號(hào)是1.6。此時(shí),Java的各種版本已經(jīng)更名,已取消其中的數(shù)字2,如J2EE更名為JavaEE,J2SE更名為JavaSE,J2ME更名為JavaME。Java開(kāi)發(fā)工具包叫做JDK6。
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月起,全世界所有的開(kāi)發(fā)人員均可對(duì)Java源代碼進(jìn)行修改。第13頁(yè)Java的發(fā)展歷程5.JavaSE72009年,Oracle公司宣布收購(gòu)Sun公司。2011年,Oracle公司舉行了全球性的活動(dòng),以慶祝Java7的推出,隨后JavaSE7正式發(fā)布,內(nèi)部版本號(hào)為1.7。JavaSE7是自從SunMicrosystems被Oracle公司收購(gòu)之后第一個(gè)重要的發(fā)布版本。JavaSE7包含許多新特性,包括為Java語(yǔ)言增加的重要特性和API庫(kù),并且對(duì)Java運(yùn)行時(shí)系統(tǒng)進(jìn)行了升級(jí),升級(jí)的內(nèi)容包括對(duì)非Java語(yǔ)言的支持。不過(guò)對(duì)Java開(kāi)發(fā)人員來(lái)說(shuō),他們最感興趣的還是為語(yǔ)言和API增加的特性。第14頁(yè)Java的發(fā)展歷程6.JavaSE82014年3月,Oracle發(fā)布JavaSE8。這也是最新的Java發(fā)布版本,對(duì)應(yīng)的Java開(kāi)發(fā)工具包稱為JDK8,內(nèi)部版本號(hào)為1.8。JDK8是Java語(yǔ)言的重要升級(jí),包含了一個(gè)影響深遠(yuǎn)的新語(yǔ)言特性:lambda表達(dá)式。從JDK8開(kāi)始,可以為接口指定的方法定義默認(rèn)實(shí)現(xiàn)。如果沒(méi)有為默認(rèn)方法創(chuàng)建實(shí)現(xiàn),就使用接口定義的默認(rèn)實(shí)現(xiàn)。這種特性允許接口隨著時(shí)間優(yōu)雅地演化,因?yàn)樵谙蚪涌谔砑有路椒〞r(shí),不會(huì)破壞現(xiàn)有代碼。在默認(rèn)實(shí)現(xiàn)更加合適時(shí),這也有助于簡(jiǎn)化接口的實(shí)現(xiàn)。第15頁(yè)第16頁(yè)主要內(nèi)容1.1Java的起源與發(fā)展史 1.2Java的特點(diǎn)
1.3Java虛擬機(jī) 1.4下載并安裝JDK 1.5使用Eclipse開(kāi)發(fā)Java程序 1.6本章小結(jié) 1.7思考和練習(xí)
1.2Java的特點(diǎn)促使Java誕生的基本動(dòng)力是可移植性和安全性,但是在Java語(yǔ)言最終成型的過(guò)程中,其他因素也扮演了重要角色。第17頁(yè)簡(jiǎn)單性第18頁(yè)Java繼承了C/C++的語(yǔ)法以及許多面向?qū)ο筇匦?,設(shè)計(jì)者們把C++語(yǔ)言中一些復(fù)雜容易出錯(cuò)的特征去掉了,例如,Java不支持goto語(yǔ)句,代之以提供break和continue語(yǔ)句以及異常處理:Java還剔除了C++的操作符重載和多繼承特征;另外,因?yàn)镴ava沒(méi)有結(jié)構(gòu),數(shù)組和字符串都是對(duì)象,所以不需要指針;Java能夠自動(dòng)處理對(duì)象的引用和間接引用,實(shí)現(xiàn)自動(dòng)的無(wú)用單元收集。對(duì)于一位有經(jīng)驗(yàn)的C++程序員,只需要非常少的努力就可以使用Java進(jìn)行程序開(kāi)發(fā)。對(duì)于初學(xué)者,只要理解了面向?qū)ο缶幊痰幕靖拍?,學(xué)習(xí)Java也會(huì)變得非常容易。面向?qū)ο蟮?9頁(yè)C++是一種經(jīng)典的面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言,Java繼承了C++中面向?qū)ο蟮睦碚?,但是?jiǎn)化了這種面向?qū)ο蟮募夹g(shù),去掉了一些復(fù)雜的技術(shù),例如多繼承、運(yùn)算符重載等。經(jīng)過(guò)這樣的處理,Java中的面向?qū)ο蠹夹g(shù)變得更簡(jiǎn)單。通過(guò)大量借鑒過(guò)去幾十年中的諸多對(duì)象軟件環(huán)境,Java設(shè)法在純進(jìn)化論者的“任何事物都是對(duì)象”模式和實(shí)用主義者的“夠用就好”模式之間找到了平衡。Java中的對(duì)象模型既簡(jiǎn)單又易于擴(kuò)展,而基本類型(例如整型)仍然是高性能的非對(duì)象類型。可移植性第20頁(yè)可移植性(跨平臺(tái))是Java語(yǔ)言最大的優(yōu)勢(shì),在Java中,并不是直接把源文件編譯成硬件可以識(shí)別的機(jī)器指令,Java的編譯器把Java源代碼編譯為字節(jié)碼文件,這種字節(jié)碼文件就是編譯Java源程序時(shí)得到的class文件,Java語(yǔ)言的跨平臺(tái)主要是指字節(jié)碼文件可以在任何軟硬件平臺(tái)上運(yùn)行,而執(zhí)行這種class文件的就是Java虛擬機(jī),Java虛擬機(jī)是軟件模擬出的計(jì)算機(jī),可以執(zhí)行編譯Java源文件得到的字節(jié)碼文件,而各種平臺(tái)的差異就是由Java虛擬機(jī)來(lái)處理的,由Java虛擬機(jī)把字節(jié)碼文件解釋成目標(biāo)平臺(tái)可以識(shí)別的機(jī)器指令,從而實(shí)現(xiàn)了Java的一次編譯,多處運(yùn)行的優(yōu)勢(shì)。安全性第21頁(yè)Java語(yǔ)言放棄了指針操作,不提供對(duì)存儲(chǔ)空間直接訪問(wèn)的方法,所有的存取過(guò)程都有Java語(yǔ)言自身來(lái)處理,這樣就可以保證系統(tǒng)的地址空間不會(huì)被有意或者無(wú)意的破壞。從而保證了系統(tǒng)的安全性和穩(wěn)定性。另外,Java虛擬機(jī)在運(yùn)行字節(jié)碼文件時(shí),會(huì)把Java程序的代碼和數(shù)據(jù)限制在具體的內(nèi)存空間內(nèi),不允許Java程序范圍指定內(nèi)存地址之外的空間,這樣就可以保證Java程序不會(huì)破壞系統(tǒng)的內(nèi)存空間,從而保證系統(tǒng)的安全性。分布式第22頁(yè)Java是針對(duì)Internet的分布式環(huán)境而設(shè)計(jì)的,因?yàn)樗芴幚鞹CP/IP協(xié)議。實(shí)際上,使用URL訪問(wèn)資源與訪問(wèn)文件沒(méi)有多大區(qū)別。Java既支持各種層次的網(wǎng)絡(luò)連接,又以Socket類支持可靠的流(stream)網(wǎng)絡(luò)連接,所以用戶可以產(chǎn)生分布式的客戶機(jī)和服務(wù)器。Java還支持遠(yuǎn)程方法調(diào)用(RemoteMethodInvocation,RMI)。這個(gè)特性允許程序通過(guò)網(wǎng)絡(luò)調(diào)用方法解釋執(zhí)行和高性能第23頁(yè)Java通過(guò)將源代碼編譯成Java字節(jié)碼的中間表示形式,可以創(chuàng)建跨平臺(tái)的程序。Java字節(jié)碼提供對(duì)體系結(jié)構(gòu)中性的目標(biāo)文件格式,代碼設(shè)計(jì)成可有效地傳送程序到多個(gè)平臺(tái),可以在所有實(shí)現(xiàn)了Java虛擬機(jī)的系統(tǒng)上運(yùn)行。在Java以前,大部分對(duì)跨平臺(tái)解決方案的嘗試對(duì)性能的影響太大。而Java字節(jié)碼經(jīng)過(guò)了仔細(xì)設(shè)計(jì),通過(guò)使用即時(shí)編譯器,可以很容易地將字節(jié)碼直接轉(zhuǎn)換為高性能的本機(jī)代碼。Java運(yùn)行時(shí)系統(tǒng)提供了這個(gè)特性,并且沒(méi)有丟失平臺(tái)獨(dú)立代碼的優(yōu)點(diǎn)。健壯性第24頁(yè)為了獲得可靠性,Java在一些關(guān)鍵領(lǐng)域進(jìn)行了限制,從而迫使程序員在程序開(kāi)發(fā)中及早地發(fā)現(xiàn)錯(cuò)誤。Java是一個(gè)強(qiáng)類型語(yǔ)言,它允許擴(kuò)展編譯時(shí)檢查潛在類型不匹配問(wèn)題的功能。Java要求顯式的方法聲明,它不支持C語(yǔ)言風(fēng)格的隱式聲明。這些嚴(yán)格的要求保證編譯程序能捕捉調(diào)用錯(cuò)誤,這就導(dǎo)致更可靠的程序。異常處理是Java使得程序更穩(wěn)健的另一個(gè)特征。在Java程序設(shè)計(jì)中,可以使用try/catch/finally語(yǔ)句,對(duì)各種異常和錯(cuò)誤進(jìn)行處理,從而保證了應(yīng)用程序在用戶的控制中運(yùn)行,繼而保證了程序的穩(wěn)定和健壯。多線程第25頁(yè)Java的設(shè)計(jì)目標(biāo)之一是滿足對(duì)創(chuàng)建交互式、網(wǎng)絡(luò)化程序的現(xiàn)實(shí)需求。為了滿足這一目標(biāo),Java支持多線程編程,允許編寫(xiě)同時(shí)執(zhí)行許多工作的程序。Java運(yùn)行時(shí)系統(tǒng)為多線程同步提供了完善的解決方案,能夠創(chuàng)造出運(yùn)行平穩(wěn)的交互式系統(tǒng)。Java提供了易用的多線程方法,使得程序開(kāi)發(fā)人員只需要考慮程序的特定行為,而不需要考慮多任務(wù)子系統(tǒng)。動(dòng)態(tài)性第26頁(yè)Java語(yǔ)言設(shè)計(jì)成適應(yīng)于變化的環(huán)境,它是一個(gè)動(dòng)態(tài)的語(yǔ)言。Java程序本身帶有大量的運(yùn)行時(shí)類型信息,這些信息可以用于在運(yùn)行時(shí)驗(yàn)證和解決對(duì)象訪問(wèn)問(wèn)題。對(duì)于那些可以在運(yùn)行的系統(tǒng)中動(dòng)態(tài)更新小段字節(jié)碼的Java環(huán)境的健壯性來(lái)說(shuō),這一特性也是很關(guān)鍵的。第27頁(yè)主要內(nèi)容1.1Java的起源與發(fā)展史 1.2Java的特點(diǎn) 1.3Java虛擬機(jī)
1.4下載并安裝JDK 1.5使用Eclipse開(kāi)發(fā)Java程序 1.6本章小結(jié) 1.7思考和練習(xí)
1.3Java虛擬機(jī)Java語(yǔ)言的一個(gè)非常重要的特點(diǎn)就是與平臺(tái)無(wú)關(guān)性。而使用Java虛擬機(jī)(JavaVirtualMachine,縮寫(xiě)為JVM)是實(shí)現(xiàn)這一特點(diǎn)的關(guān)鍵。下面就來(lái)看一下什么是JVM以及JVM的工作原理。第28頁(yè)什么是JVMJVM是JavaVirtualMachine的縮寫(xiě),它是一種用于計(jì)算設(shè)備的規(guī)范,是一個(gè)虛構(gòu)出來(lái)的計(jì)算機(jī),是通過(guò)在實(shí)際的計(jì)算機(jī)上仿真模擬各種計(jì)算機(jī)功能來(lái)實(shí)現(xiàn)的。Java虛擬機(jī)包括一套字節(jié)碼指令集、一組寄存器、一個(gè)棧、一個(gè)垃圾回收堆和一個(gè)存儲(chǔ)方法域。JVM屏蔽了與具體操作系統(tǒng)平臺(tái)相關(guān)的信息,使Java程序只需生成在Java虛擬機(jī)上運(yùn)行的目標(biāo)代碼(字節(jié)碼)就可以在多種平臺(tái)上不加修改地運(yùn)行,這就是Java能夠“一次編譯,到處運(yùn)行”的原因。JVM是JRE的一部分,它有自己完善的硬件架構(gòu),如處理器、堆棧、寄存器等,還具有相應(yīng)的指令系統(tǒng)。第29頁(yè)JVM的工作原理JVM是Java的核心與基礎(chǔ),它是一種利用軟件方法實(shí)現(xiàn)的抽象的計(jì)算機(jī)基于底層的操作系統(tǒng)和硬件平臺(tái),可以在上面執(zhí)行Java的字節(jié)碼程序。第30頁(yè)JVM生命周期一個(gè)運(yùn)行中的JVM有著一個(gè)清晰的任務(wù):執(zhí)行Java程序。程序開(kāi)始執(zhí)行時(shí)他才運(yùn)行,程序結(jié)束時(shí)他就停止。如果在同一臺(tái)機(jī)器上運(yùn)行3個(gè)Java程序,就會(huì)有3個(gè)運(yùn)行中的JVM。一個(gè)JVM實(shí)例對(duì)應(yīng)了一個(gè)獨(dú)立運(yùn)行的Java程序,它是進(jìn)程級(jí)別的;JVM執(zhí)行引擎實(shí)例則對(duì)應(yīng)了屬于用戶運(yùn)行程序的線程,它是線程級(jí)別的。第31頁(yè)JVM體系結(jié)構(gòu)JVM的內(nèi)部體系結(jié)構(gòu)分為三部分:類裝載器(ClassLoader)、執(zhí)行引擎和運(yùn)行時(shí)數(shù)據(jù)區(qū)。第32頁(yè)JVM垃圾回收J(rèn)VM中自動(dòng)的對(duì)象內(nèi)存回收機(jī)制稱為垃圾回收(GarbageCollection,簡(jiǎn)稱GC)。GC是將內(nèi)存中不再被使用的對(duì)象進(jìn)行回收。GC中用于回收的方法稱為收集器,由于GC需要消耗一些資源和時(shí)間,Java在對(duì)對(duì)象的生命周期特征進(jìn)行分析后,按照新生代、舊生代的方式來(lái)對(duì)對(duì)象進(jìn)行收集,以盡可能的縮短GC對(duì)應(yīng)用造成的暫停。對(duì)新生代的對(duì)象的收集稱為minorGC;對(duì)舊生代的對(duì)象的收集稱為FullGC;程序中主動(dòng)調(diào)用System.gc();語(yǔ)句強(qiáng)制執(zhí)行的GC為FullGC。第33頁(yè)第34頁(yè)主要內(nèi)容1.1Java的起源與發(fā)展史 1.2Java的特點(diǎn) 1.3Java虛擬機(jī) 1.4下載并安裝JDK
1.5使用Eclipse開(kāi)發(fā)Java程序 1.6本章小結(jié) 1.7思考和練習(xí)
1.4下載并安裝JDK
JDK(全名JavaDevelopmentKit,Java開(kāi)發(fā)工具集)是整個(gè)Java的核心,其中包括了Java運(yùn)行環(huán)境JRE、一些Java工具和Java基礎(chǔ)類庫(kù)(rt.jar)。第35頁(yè)安裝JDKJDK的安裝文件可以從/technetwork/java/javase/downloads/index.html下載,目前的JDK版本為8.0,JDK的安裝文件有三個(gè)不同操作系統(tǒng)的版本,Windows版本的JDK下載下來(lái)的文件為jdk-8u111-windows-i586.exe。如果需要之前的版本,也可以在前面的下載頁(yè)面中尋找相應(yīng)的鏈接地址。雙擊運(yùn)行下載的安裝文件,啟動(dòng)安裝向?qū)?。?6頁(yè)配制環(huán)境變量在JDK安裝結(jié)束之后,必需進(jìn)行環(huán)境變量的設(shè)置,然后才可以使用JDK提供的開(kāi)發(fā)工具。新建JAVA_HOME和classpath配制path變量第37頁(yè)配制環(huán)境變量在JDK安裝結(jié)束之后,必需進(jìn)行環(huán)境變量的設(shè)置,然后才可以使用JDK提供的開(kāi)發(fā)工具。新建JAVA_HOME和classpath
JAVA_HOME的值為JDK在系統(tǒng)中的安裝路徑“C:\ProgramFiles(x86)\Java\jdk1.8.0_111”classpath的值為“.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar”配制path變量添加“%JAVA_HOME%\bin;”第38頁(yè)HelloWorld程序Java語(yǔ)言的HelloWorld程序的代碼如下:publicclassHello{ publicstaticvoidmain(String[]args){ System.out.println("HelloWorld"); }}第39頁(yè)HelloWorld程序文本編輯器輸入代碼Java編譯器要求源文件的后綴名為.java,并且文件的名稱要與該文件中包含的公有類(使用public修飾的類)的名稱一致(包括大小寫(xiě)也要一致,因?yàn)镴ava是大小寫(xiě)敏感的)編譯C:\>javacHello.java運(yùn)行C:\>javaHello第40頁(yè)第41頁(yè)主要內(nèi)容1.1Java的起源與發(fā)展史 1.2Java的特點(diǎn) 1.3Java虛擬機(jī) 1.4下載并安裝JDK 1.5使用Eclipse開(kāi)發(fā)Java程序
1.6本章小結(jié) 1.7思考和練習(xí)
1.5使用Eclipse開(kāi)發(fā)Java程序前面我們使用記事本編寫(xiě)了一個(gè)簡(jiǎn)單的Java程序,但是對(duì)于較復(fù)雜的應(yīng)用程序,通常需要借助集成開(kāi)發(fā)環(huán)境(IntegratedDevelopmentEnvironment,IDE)來(lái)簡(jiǎn)化開(kāi)發(fā)工作,從而提高開(kāi)發(fā)效率。Eclipse是一款主要用Java編寫(xiě)的免費(fèi)JavaIDE,使用Eclipse可以創(chuàng)建各種跨平臺(tái)的可用于手機(jī)、網(wǎng)絡(luò)、桌面和企業(yè)領(lǐng)域的Java應(yīng)用程序。本節(jié)將簡(jiǎn)要介紹Eclipse的安裝與使用。
第42頁(yè)IDE簡(jiǎn)介IDE是一種用于輔助開(kāi)發(fā)人員開(kāi)發(fā)應(yīng)用程序的應(yīng)用軟件,一般包括代碼編輯器、編譯器、調(diào)試器和圖形用戶界面工具,有的還包括版本控制系統(tǒng)、性能分析器等更多輔助工具,因此IDE都具有編寫(xiě)、編譯、調(diào)試等多種功能。IDE的種類非常多,有的IDE能同時(shí)支持多種應(yīng)用程序的開(kāi)發(fā),例如,Eclipse能用于Java、PHP、C++等多種語(yǔ)言開(kāi)發(fā);有的IDE只針對(duì)特定的語(yǔ)言開(kāi)發(fā),如JSource只能用于Java的開(kāi)發(fā),ZendStudio只能用于PHP的開(kāi)發(fā)第43頁(yè)使用Eclipse新建Java工程Eclipse是一個(gè)開(kāi)放源代碼的、基于Java的可擴(kuò)展開(kāi)發(fā)平臺(tái)。就其本身而言,它只是一個(gè)框架和一組服務(wù),用于通過(guò)插件組構(gòu)建開(kāi)發(fā)環(huán)境。但是,Eclipse附帶了一個(gè)標(biāo)準(zhǔn)的插件集,包括Java開(kāi)發(fā)工具(JavaDevelopmentTools,JDT),這就使其功能變得非常強(qiáng)大。雙擊Eclipse安裝目錄下的eclipse.exe文件即可啟動(dòng)Eclipse,此時(shí)會(huì)加載所需文件,之后會(huì)顯示workspace選擇界面,該界面用于設(shè)置應(yīng)用程序的默認(rèn)存儲(chǔ)位置。第44頁(yè)使用Eclipse新建Java工程設(shè)置好工作空間后,單擊OK按鈕進(jìn)入Eclipse歡迎界面。選擇File|New|“JavaProject”命令,打開(kāi)“NewJavaProject”對(duì)話框。在“Projectname”文本框中輸入工程名ch01,JRE選擇“UseanexecutionenvironmentJRE”單選按鈕,然后從后面的下拉列表中選擇“JavaSE-1.8”。單擊Finish按鈕,完成工程的創(chuàng)建。第45頁(yè)使用Eclipse新建Java工程接下來(lái),在該工程內(nèi)新建一個(gè)Java類,用來(lái)輸出HelloWorld。選擇File|New|Class命令,打開(kāi)“NewJavaClass”對(duì)話框。新建類的文件默認(rèn)存放的路徑為“{工程名}/src”,默認(rèn)的包名(Package)為“{工程名}”。因?yàn)槲覀兊念愔行枰猰ain方法,所以可以選中下面的“publicstaticvoidmain(String[]args)”復(fù)選框,這樣,系統(tǒng)會(huì)默認(rèn)生成一個(gè)main方法。輸入代碼后,單擊工具欄中的保存按鈕即可第46頁(yè)運(yùn)行程序代碼輸入正確后,系統(tǒng)會(huì)自動(dòng)完成編譯工作,此時(shí)將在工程的bin/ch01目錄生成Hello.class文件。接下來(lái)將介紹如何運(yùn)行或調(diào)試程序。選擇Run菜單中的Run、“RunAs”或者“RunHistory”命令可以直接運(yùn)行指定的程序,如本例中選擇Run|“RunAs”|“JavaApplication”命令即可運(yùn)行Hello程序,控制臺(tái)窗口(Console)中輸出“HelloWorld”信息。第47頁(yè)Eclipse的常用快捷鍵Eclipse提供了豐富的輔助開(kāi)發(fā)功能,而且很多常用的功能都提供了快捷鍵,使用這些快捷鍵可以幫助我們更熟練的使用Eclipse,提高開(kāi)發(fā)效率,對(duì)于今后走向工作崗位也大有裨益。第48頁(yè)第49頁(yè)主要內(nèi)容1.1Java的起源與發(fā)展史 1.2Java的特點(diǎn) 1.3Java虛擬機(jī) 1.4下載并安裝JDK 1.5使用Eclipse開(kāi)發(fā)Java程序 1.6本章小結(jié)
1.7思考和練習(xí)
1.6本章小結(jié)本章全面講述了Java語(yǔ)言的起源與發(fā)展歷程,以及如何使用Eclipse開(kāi)發(fā)Java應(yīng)用程序。首先,介紹了Java的起源于發(fā)展史,包括程序語(yǔ)言的發(fā)展階段、Java的家世、Java的發(fā)展歷程等。接下來(lái),分析了Java語(yǔ)言的特點(diǎn)以及Java虛擬機(jī)的工作原理。之后,講述了JDK的安裝與配置,并通過(guò)HelloWorld案例介紹Java程序的開(kāi)發(fā)、編譯和運(yùn)行過(guò)程。最后,重點(diǎn)介紹了使用Eclipse開(kāi)發(fā)Java應(yīng)用程序的基本步驟,以及Eclipse的常用操作。第50頁(yè)第51頁(yè)主要內(nèi)容1.1Java的起源與發(fā)展史 1.2Java的特點(diǎn) 1.3Java虛擬機(jī) 1.4下載并安裝JDK 1.5使用Eclipse開(kāi)發(fā)Java程序 1.6本章小結(jié) 1.7思考和練習(xí)
1.7思考和練習(xí)1.簡(jiǎn)述Java的發(fā)展歷程。2.Java語(yǔ)言有哪些特點(diǎn)?3.什么是Java虛擬機(jī),簡(jiǎn)述其工作原理?4.配置JDK環(huán)境變量時(shí),需要新建哪兩個(gè)環(huán)境變量?5上機(jī)練習(xí):使用Eclipse新建一個(gè)Java工程,然后新建Hello類,輸出HelloWorld信息。6.練習(xí)在Eclipse中運(yùn)行和調(diào)試Java應(yīng)用程序。第52頁(yè)第2章Java編程基礎(chǔ)第53頁(yè)本章概述本章的學(xué)習(xí)目標(biāo)主要內(nèi)容本章概述學(xué)習(xí)一門語(yǔ)言,總是從它的基本語(yǔ)法學(xué)起,本章將從Java程序的基本元素講起,詳細(xì)介紹Java的基本語(yǔ)法,包括標(biāo)志符與關(guān)鍵字、變量及其類型、Java運(yùn)算符與表達(dá)式、流程控制語(yǔ)句以及Java的數(shù)組。第54頁(yè)本章的學(xué)習(xí)目標(biāo)了解Java程序的基本元素掌握變量的聲明與使用理解變量的作用域掌握J(rèn)ava的運(yùn)算符及其優(yōu)先級(jí)掌握J(rèn)ava的選擇結(jié)構(gòu)與循環(huán)結(jié)構(gòu)掌握數(shù)組的聲明與引用第55頁(yè)第56頁(yè)主要內(nèi)容2.1Java程序的基本元素
2.2變量及其作用域 2.3運(yùn)算符與表達(dá)式 2.4Java流程控制 2.5數(shù)組 2.6本章小結(jié) 2.7思考和練習(xí)
2.1Java程序的基本元素Java程序是由空白符、分隔符、標(biāo)識(shí)符、關(guān)鍵字、字面值(常量)、注釋以及運(yùn)算符等組合而成的。第57頁(yè)空白符Java是一種格式自由的語(yǔ)言,每行代碼不需要遵循特定的縮進(jìn)規(guī)則。例如,可以將上一章中的Hello.java中的所有代碼寫(xiě)在一行上,也可以在兩行代碼之間有任意空白行,或者進(jìn)行任意的縮進(jìn),只要不分隔指定的關(guān)鍵字和標(biāo)識(shí)符,并在每個(gè)(未被運(yùn)算符或分隔符限定的)標(biāo)記之間至少有一個(gè)空白符即可。在Java中,空白符可以是空格、制表符或換行符。第58頁(yè)分隔符在Java中,有一些字符被用作分隔符。最常用的分隔符是分號(hào)(;)。在HelloWorld程序中已經(jīng)看到過(guò),分號(hào)用于結(jié)束語(yǔ)句第59頁(yè)符
號(hào)名
稱用
途()小括號(hào)在定義和調(diào)用方法時(shí)用于包含參數(shù)列表,也可用于在表達(dá)式中定義優(yōu)先權(quán)、在控制語(yǔ)句中包含表達(dá)式以及強(qiáng)制類型轉(zhuǎn)換{}大括號(hào)用于包含自動(dòng)初始化數(shù)組的值,也可用于定義代碼塊、類、方法以及局部作用域[]方括號(hào)用于聲明數(shù)組類型,也可用于訪問(wèn)數(shù)組元素;分號(hào)結(jié)束語(yǔ)句,逗號(hào)在變量聲明中分隔連續(xù)的多個(gè)標(biāo)識(shí)符,也可用于for循環(huán)中,將小括號(hào)中的多個(gè)表達(dá)式鏈接到一起.句號(hào)用于將包的名稱與子包以及類的名稱分隔開(kāi),也可用于將變量或方法與引用變量分隔開(kāi)::冒號(hào)用于創(chuàng)建方法或構(gòu)造函數(shù)引用(在JDK8中引入)標(biāo)識(shí)符簡(jiǎn)單地說(shuō),標(biāo)識(shí)符是由程序設(shè)計(jì)或者開(kāi)發(fā)人員定義的,用來(lái)標(biāo)識(shí)一個(gè)類名、變量名、方法名、類型名、數(shù)組名或文件名的有效字符序列。標(biāo)識(shí)符必須遵循一定的語(yǔ)法規(guī)則并且有必要遵守一定的規(guī)范。Java中的標(biāo)識(shí)符必須符號(hào)下列規(guī)則:
標(biāo)識(shí)符可以由字母、下劃線、美元符號(hào)$和數(shù)字組成。但是,從JDK8開(kāi)始,不建議使用下劃線作為標(biāo)識(shí)符標(biāo)識(shí)符的第一個(gè)字符不能是數(shù)字。標(biāo)識(shí)符不能是Java的關(guān)鍵字和保留字。第60頁(yè)關(guān)鍵字和其他語(yǔ)言一樣,Java也有許多保留關(guān)鍵字。在Java語(yǔ)言中,目前定義了50個(gè)關(guān)鍵字。這些關(guān)鍵字與運(yùn)算符和分隔符的語(yǔ)法一起形成了Java語(yǔ)言的基礎(chǔ)。關(guān)鍵字不能用作標(biāo)識(shí)符。因此,它們不能用作變量、類或方法的名稱。Java保留了const和goto關(guān)鍵字,但是沒(méi)有使用,所以也不能用const和goto作為標(biāo)識(shí)符。第61頁(yè)字面值在Java中,常量就是在程序中其值不能改變的量。常量的值是通過(guò)使用表示常量的字面值(literal)創(chuàng)建的。例如,下面是一些字面值:100 98.6 'X' "Thisisatest"true從左向右,依次為一個(gè)整數(shù)、一個(gè)浮點(diǎn)數(shù)值、一個(gè)字符常量、一個(gè)字符串和一個(gè)布爾值。在可以使用某種類型的值的任何地方,都可以使用對(duì)應(yīng)類型的字面值。第62頁(yè)第63頁(yè)主要內(nèi)容2.1Java程序的基本元素 2.2變量及其作用域
2.3運(yùn)算符與表達(dá)式 2.4Java流程控制 2.5數(shù)組 2.6本章小結(jié) 2.7思考和練習(xí)
2.2變量及其作用域在Java程序中,變量是基本的存儲(chǔ)單元,變量的值在程序運(yùn)行過(guò)程中可以改變。本節(jié)將詳細(xì)介紹變量的聲明及其作用域。Java是一種強(qiáng)類型化的語(yǔ)言,強(qiáng)類型化意味著什么呢?首先,每個(gè)變量要具有一種類型,每個(gè)表達(dá)式具有一種類型,并且每種類型都是嚴(yán)格定義的;其次,所有賦值,不管是顯式的還是在方法調(diào)用中通過(guò)參數(shù)傳遞的,都要進(jìn)行類型兼容性檢查。任何類型不匹配都會(huì)產(chǎn)生編譯錯(cuò)誤。第64頁(yè)基本數(shù)據(jù)類型第65頁(yè)Java中內(nèi)建了8種基本數(shù)據(jù)類型:byte、short、int、long、char、float、double和boolean?;绢愋屯ǔR卜Q為簡(jiǎn)單類型,這些類型可以被分成4組:整型:這一組包括byte、short、int和long,它們用于表示有符號(hào)整數(shù)。浮點(diǎn)型:這一組包括float和double,它們表示帶小數(shù)位的數(shù)字。字符型:這一組包括char,表示字符集中的一個(gè)符號(hào),比如字母和數(shù)字。布爾型:這一組包括boolean,這是一種用于表示真或假的特殊類型。整型第66頁(yè)Java定義了4種整數(shù)類型:byte、short、int和long。它們具有不同的寬度和取值范圍。類型寬度范
圍byte8-128~127short16-32768~32767int32-2147483648~2147483647long64-9223372036854775808~9223372036854775807浮點(diǎn)數(shù)第67頁(yè)浮點(diǎn)數(shù)也稱為實(shí)數(shù)(realnumber),當(dāng)計(jì)算需要小數(shù)精度的表達(dá)式時(shí)使用。Java實(shí)現(xiàn)了IEEE-754標(biāo)準(zhǔn)集的浮點(diǎn)類型和運(yùn)算符。有兩種浮點(diǎn)類型——float和double,它們分別表示單精度和雙精度浮點(diǎn)數(shù)。類型寬度范
圍float321.4e-045~3.4e+038,-1.4e-045~-3.4e+038double644.9e-324~1.8e+308,-4.9e-324~-1.8e+308字符型第68頁(yè)用于存儲(chǔ)字符的數(shù)據(jù)類型是char。但是,Java中的char與C或C++中的char是不同的。在C/C++中,char的寬度是8位。而在Java中char是16位(兩個(gè)字節(jié))的。這是因?yàn)镴ava使用Unicode表示字符。Unicode定義了一個(gè)完全國(guó)際化的字符集,能夠表示全部人類語(yǔ)言中的所有字符。Unicode是數(shù)十種字符集的統(tǒng)一體,比如拉丁字符集、希臘字符集、阿拉伯字符集、斯拉夫語(yǔ)字符集、希伯來(lái)語(yǔ)字符集、日文字符集、韓文字符集等。布爾型第69頁(yè)Java中使用boolean類型來(lái)表示邏輯值。它的取值只有兩個(gè):true或false。所有關(guān)系運(yùn)算(例如a<b)都返回這種類型的值。對(duì)于if和for這類控制語(yǔ)句的條件表達(dá)式,也需要boolean類型。變量的聲明與賦值第70頁(yè)變量是一個(gè)數(shù)據(jù)存儲(chǔ)空間的表示。通過(guò)變量名可以簡(jiǎn)單快速地找到它存儲(chǔ)的數(shù)據(jù)。變量是存儲(chǔ)數(shù)據(jù)的一個(gè)基本單元,不同的變量相互獨(dú)立。在Java中,所有變量在使用之前必須先聲明。聲明變量的基本形式如下:typevarName1[=value1][,varName2[=value2]…];其中,type可以是Java的原子類型、類或接口的名稱(類和接口類型將在后面章節(jié)討論);varName1是變量的名稱,可以是任意合法的標(biāo)識(shí)符;可以通過(guò)指定一個(gè)等號(hào)和一個(gè)值來(lái)初始化變量;如果要同時(shí)聲明相同類型的多個(gè)變量,可以使用以逗號(hào)將其分隔。變量的聲明與賦值第71頁(yè)inta,b,c; //聲明3個(gè)整型變量a,b,c.intd=3,e,f=5; //聲明3個(gè)整型變量d,e,f.且對(duì)d和f進(jìn)行初始化bytez=22;//聲明byte型變量z并初始化.doublepi=3.14159; //聲明雙精度浮點(diǎn)型變量pi.charx='堃';//聲明字符型變量x并初始化為'堃'.常量的聲明第72頁(yè)常量在程序運(yùn)行時(shí),不會(huì)被修改的量。在Java中使用final關(guān)鍵字來(lái)修飾常量,聲明方式和變量類似,例如,下面聲明了一個(gè)double類型的常量PI:finaldoublePI=3.1415927;該值在程序運(yùn)行過(guò)程中不能被修改,例如,下面企圖給PI賦值的語(yǔ)句將產(chǎn)生編譯錯(cuò)誤:PI=3.1415926535898;雖然常量名也可以用小寫(xiě)字母,但為了便于識(shí)別,通常使用大寫(xiě)字母命名常量。數(shù)據(jù)類型轉(zhuǎn)換第73頁(yè)在對(duì)變量進(jìn)行賦值時(shí),經(jīng)常會(huì)遇到將某種類型的值賦給另外一種類型的變量的情況。如果這兩種類型是兼容的,那么Java會(huì)自動(dòng)進(jìn)行類型轉(zhuǎn)換。例如,總是可以將int類型的值賦給long類型的變量。如果兩種類型是不兼容的,則需要使用強(qiáng)制類型轉(zhuǎn)換。當(dāng)將某種類型的數(shù)據(jù)賦給另外一種類型的變量時(shí),如果滿足如下兩個(gè)條件,就會(huì)發(fā)生自動(dòng)類型轉(zhuǎn)換: 兩種類型是兼容的。
目標(biāo)類型大于源類型。強(qiáng)制類型轉(zhuǎn)換第74頁(yè)自動(dòng)類型轉(zhuǎn)換很簡(jiǎn)單,但是它們不能完全滿足全部需要。當(dāng)兩種類型不兼容或者目標(biāo)類型的范圍小于源類型時(shí),就必須使用強(qiáng)制類型轉(zhuǎn)換。強(qiáng)制類型轉(zhuǎn)換是一種顯式類型轉(zhuǎn)換,它的一般形式如下:target-typevarName=(target-type)value表達(dá)式中的自動(dòng)類型提升除了賦值外,還有另外一個(gè)地方也可能會(huì)發(fā)生類型轉(zhuǎn)換:在表達(dá)式中。如下面的代碼段:bytea=40;byteb=50;bytec=100;intd=a*b/c;在計(jì)算a*b的結(jié)果時(shí),很容易超出byte操作數(shù)的范圍。為了解決這類問(wèn)題,當(dāng)對(duì)表達(dá)式求值時(shí),Java自動(dòng)將每個(gè)byte、short或char操作數(shù)提升為int類型。因此,盡管a和b都被指定為byte類型,中間表達(dá)式(50*40)的結(jié)果2000也是合法的。這就是表達(dá)式中的自動(dòng)類型提升。第75頁(yè)表達(dá)式中的自動(dòng)類型提升Java定義了幾個(gè)應(yīng)用于表達(dá)式的類型提升規(guī)則,如下:(1)所有byte、short和char類型的值都被提升為int類型。(2)如果有一個(gè)操作數(shù)是long類型,就將整個(gè)表達(dá)式提升為long類型。(3)如果有一個(gè)操作數(shù)是float類型,就將整個(gè)表達(dá)式提升為float類型。(4)如果有一個(gè)操作數(shù)為double類型,結(jié)果將為double類型。第76頁(yè)變量的作用域在作用域中聲明的變量,對(duì)于在作用域之外定義的代碼是不可見(jiàn)的(即不可訪問(wèn))。因此,當(dāng)在某個(gè)作用域中聲明變量時(shí),就局部化了該變量,并保護(hù)它免受未授權(quán)的訪問(wèn)和/或修改。在Java中,兩種主要的作用域分別是由類和方法定義的。對(duì)類作用域(以及在其中聲明的變量)相關(guān)的內(nèi)容將在第3章介紹,這里只分析由方法定義以及在方法中定義的作用域。作用域是可以嵌套的,出現(xiàn)嵌套時(shí),外層的作用域包圍了內(nèi)層作用域。即在外層作用域中聲明的對(duì)象對(duì)于內(nèi)層作用域中的代碼是可見(jiàn)的。而反過(guò)來(lái)則不行,在內(nèi)層作用域中聲明的變量,在內(nèi)層作用域之外是不可見(jiàn)的。第77頁(yè)第78頁(yè)主要內(nèi)容2.1Java程序的基本元素 2.2變量及其作用域 2.3運(yùn)算符與表達(dá)式
2.4Java流程控制 2.5數(shù)組 2.6本章小結(jié) 2.7思考和練習(xí)
2.3運(yùn)算符與表達(dá)式計(jì)算機(jī)最基本的用途之一就是執(zhí)行數(shù)學(xué)運(yùn)算,作為一門計(jì)算機(jī)語(yǔ)言,Java提供了豐富的運(yùn)算符來(lái)操縱變量。按功能可把運(yùn)算符分為6組:算術(shù)運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符、位運(yùn)算符、賦值運(yùn)算符和其他運(yùn)算符。第79頁(yè)基本概念運(yùn)算符操作的對(duì)象叫操作數(shù)。根據(jù)運(yùn)算符所操作的操作數(shù)的個(gè)數(shù),可以把運(yùn)算符分為單目運(yùn)算符、雙目運(yùn)算符和三目運(yùn)算符。用運(yùn)算符把操作數(shù)按照J(rèn)ava的語(yǔ)法規(guī)則連接起來(lái)的式子成為表達(dá)式。例如,“b-2”就是一個(gè)表達(dá)式,其中b和2是操作數(shù),通過(guò)雙目運(yùn)算符減號(hào)(-)連接起來(lái),表示對(duì)操作數(shù)b執(zhí)行減法操作,減數(shù)為2。第80頁(yè)算術(shù)運(yùn)算符算術(shù)運(yùn)算符用在數(shù)學(xué)表達(dá)式中,其使用方法與在數(shù)學(xué)中的用法相同。(1)算術(shù)運(yùn)算符的操作數(shù)必須是數(shù)值類型。不能為boolean類型,但可以是char類型,因?yàn)樵贘ava中,char類型在本質(zhì)上是int的子集。(2)當(dāng)將除法運(yùn)算符用于兩個(gè)整數(shù)類型時(shí),結(jié)果也是整數(shù),小數(shù)部分會(huì)丟失。(3)求模運(yùn)算符%可以返回除法操作的余數(shù),既可以用于浮點(diǎn)數(shù),也可以用于整數(shù)。(4)求模運(yùn)算符結(jié)果的符號(hào)與第一個(gè)操作數(shù)相同,如-5%2結(jié)果為-1,5%-2的結(jié)果為1。(5)自增和自減運(yùn)算符的操作數(shù)只能是變量,即不能出現(xiàn)(a+b)++;而其他幾個(gè)算術(shù)運(yùn)算符的操作數(shù)可以是變量、字面值、表達(dá)式、或函數(shù)調(diào)用。(6)自增和自減都有兩種形式:前綴和后綴。前綴形式是指自增或自減運(yùn)算符位于變量的前面,如++a,--b,這種形式出現(xiàn)在表達(dá)式中時(shí),先將操作數(shù)的值進(jìn)行自增或者自減運(yùn)算,再使用操作數(shù)的值進(jìn)行表達(dá)式運(yùn)算;后綴形式是指自增或自減運(yùn)算符位于變量的后面,如a++,b--,執(zhí)行的時(shí)候是先使用操作數(shù)的值進(jìn)行表達(dá)式運(yùn)算,再對(duì)操作數(shù)進(jìn)行自增或者自減運(yùn)算。第81頁(yè)關(guān)系運(yùn)算符關(guān)系運(yùn)算符用來(lái)判定一個(gè)操作數(shù)與另外一個(gè)操作數(shù)之間的大小關(guān)系,其運(yùn)算結(jié)果為一個(gè)布爾(boolean)值,要么是true,要么是false。關(guān)系運(yùn)算符最常用于if語(yǔ)句和各種循環(huán)語(yǔ)句的控制表達(dá)式中。前面學(xué)過(guò)的任何數(shù)據(jù)類型,包括整數(shù)、浮點(diǎn)數(shù)、字符以及布爾值,都可以使用等于運(yùn)算符“==”和不等性運(yùn)算符“!=”進(jìn)行比較。但是其余4個(gè)關(guān)系運(yùn)算符則只有數(shù)值類型才能使用,即只有整型、浮點(diǎn)型以及字符型操作數(shù),才可以進(jìn)行判定相互之間大小的比較。在Java中,“相等”是用兩個(gè)等號(hào)表示的,而不是一個(gè)等號(hào),單個(gè)等號(hào)是賦值運(yùn)算符。
第82頁(yè)邏輯運(yùn)算符邏輯運(yùn)算符要求操作數(shù)的數(shù)據(jù)類型為布爾型,其運(yùn)算結(jié)果也是布爾型。第83頁(yè)運(yùn)算符描
述&邏輯與,只有兩個(gè)操作數(shù)都為true時(shí),結(jié)果才為true,否則為false|邏輯或,只要有一個(gè)操作數(shù)為true,結(jié)果就為true,否則為false^邏輯異或,兩個(gè)操作數(shù)不同時(shí),結(jié)果為true,否則為false&&條件與,與邏輯與類似,不同的是如果第一個(gè)操作數(shù)為false,則不計(jì)算第二個(gè)操作數(shù)||條件或,與邏輯或類似,不同的是如果第一個(gè)操作數(shù)為true,則不計(jì)算第二個(gè)操作數(shù)!邏輯非,單目運(yùn)算符,對(duì)操作數(shù)的值取反,如果操作數(shù)值為true,則結(jié)果為false;如果操作數(shù)為false,則結(jié)果為true邏輯運(yùn)算符條件與、條件或和邏輯與、邏輯或的區(qū)別主要體現(xiàn)在第二個(gè)操作數(shù)為表達(dá)式的時(shí)候。第84頁(yè)操作數(shù)A操作數(shù)BA&BA|BA^B!Atruetruetruetruefalsefalsetruefalsefalsetruetruefalsefalsetruefalsetruetruetruefalsefalsefalsefalsefalsetrue位運(yùn)算符位運(yùn)算是以二進(jìn)制位為單位進(jìn)行的運(yùn)算,其操作數(shù)和運(yùn)算結(jié)果都是整型值。第85頁(yè)運(yùn)算符描
述&按位與,如果對(duì)應(yīng)位都是1,則結(jié)果為1,否則為0與邏輯與寫(xiě)法一樣,但操作數(shù)類型不同|按位或,如果對(duì)應(yīng)位都是0,則結(jié)果為0,否則為1與邏輯或?qū)懛ㄒ粯?,但操作?shù)類型不同~按位取反,翻轉(zhuǎn)操作數(shù)的每一位,即0變成1,1變成0^按位異或,如果對(duì)應(yīng)位的值相同,則結(jié)果為0,否則為1<<左移,左操作數(shù)按位左移右操作數(shù)指定的位數(shù)>>右移,左操作數(shù)按位右移右操作數(shù)指定的位數(shù),移動(dòng)得到的空位補(bǔ)符號(hào)位>>>無(wú)符號(hào)右移,左操作數(shù)的值按右操作數(shù)指定的位數(shù)右移,移動(dòng)得到的空位以零填充賦值運(yùn)算符賦值運(yùn)算符的作用是將一個(gè)值賦給一個(gè)變量。最常用的賦值運(yùn)算符是“=”,前面的很多案例中都在使用該運(yùn)算符。除了前面程序中出現(xiàn)的賦值運(yùn)算符形式以外,還可以在一個(gè)語(yǔ)句中創(chuàng)建賦值鏈,同時(shí)為多個(gè)變量賦值。例如:intx,y,z;x=y=z=100;//x,y,z都被賦值為100第86頁(yè)條件運(yùn)算符條件運(yùn)算符是Java中唯一一個(gè)三目(三個(gè)分支)運(yùn)算符,它需要3個(gè)操作數(shù),可以替代簡(jiǎn)單的條件分支(if-else語(yǔ)句)。該運(yùn)算符由問(wèn)號(hào)(?)和冒號(hào)(:)組成,語(yǔ)法格式如下:<表達(dá)式1>?<表達(dá)式2>:<表達(dá)式3>其中,<表達(dá)式1>可以是任何結(jié)果為布爾值的表達(dá)式。首先計(jì)算<表達(dá)式1>的值,如果其值為true,就對(duì)<表達(dá)式2>進(jìn)行求值并作為整個(gè)條件表達(dá)式的值;否則對(duì)<表達(dá)式3>進(jìn)行求值并作為整個(gè)條件表達(dá)式的值。第87頁(yè)條件運(yùn)算符使用條件運(yùn)算符時(shí)需要注意以下兩點(diǎn):<表達(dá)式2>和<表達(dá)式3>都需要返回相同(或兼容)的類型,并且不能為void。<表達(dá)式2>和<表達(dá)式3>只有一個(gè)被執(zhí)行,例如,a=0;a>0?a++:--a,因?yàn)閍>0的值為false,所以執(zhí)行--a,表達(dá)式2(a++)不會(huì)被執(zhí)行。第88頁(yè)instanceof運(yùn)算符instanceof(注意中間沒(méi)有空格)運(yùn)算符又叫對(duì)象運(yùn)算符,該運(yùn)算符用于操作對(duì)象實(shí)例,檢查該對(duì)象是否是一個(gè)特定類型(類類型或接口類型)。instanceof運(yùn)算符的語(yǔ)法格式如下:(variable)instanceof(class/interfacetype)如果運(yùn)算符左側(cè)變量所指的對(duì)象,是操作符右側(cè)的類或接口(class/interface)的一個(gè)對(duì)象,那么結(jié)果為真。第89頁(yè)點(diǎn)運(yùn)算符點(diǎn)運(yùn)算符就是一個(gè)英文輸入法中的句點(diǎn)“.”,它的功能有兩個(gè):一是引用類中成員,二是指示包的層次等級(jí)。如前面我們用的最多的輸出語(yǔ)句System.out.pringln中就有點(diǎn)運(yùn)算符,這里的功能就是引用類中的成員。第90頁(yè)方括號(hào)[]和圓括號(hào)()運(yùn)算符方括號(hào)[]是數(shù)組運(yùn)算符,方括號(hào)[]中的數(shù)值是數(shù)組的下標(biāo),整個(gè)表達(dá)式就代表數(shù)組中該下標(biāo)所在位置的元素值,該運(yùn)算符的用法將在2.5節(jié)學(xué)習(xí)數(shù)組時(shí)詳細(xì)介紹。圓括號(hào)()運(yùn)算符用于強(qiáng)制類型轉(zhuǎn)換和改變表達(dá)式中運(yùn)算符的優(yōu)先級(jí)。就像我們?cè)跀?shù)學(xué)運(yùn)算中增加括號(hào)改變優(yōu)先級(jí)一樣。第91頁(yè)字符串相加運(yùn)算符當(dāng)操作數(shù)是字符串時(shí),加(+)運(yùn)算符用來(lái)合并兩個(gè)字符串。如果加(+)運(yùn)算符的一邊是字符串,另一邊是數(shù)值或其他數(shù)據(jù)類型時(shí),系統(tǒng)自動(dòng)將另一邊的操作數(shù)轉(zhuǎn)換為字符串,然后連接為一個(gè)字符串如前面程序中出現(xiàn)的代碼:System.out.println("i="+i+"j="+j);第92頁(yè)運(yùn)算符的優(yōu)先級(jí)優(yōu)先級(jí)描
述運(yùn)算符結(jié)合性1分隔符[]().(點(diǎn)運(yùn)算符)2單目運(yùn)算符++--!~+(正數(shù))-(負(fù)數(shù))從右到左3算術(shù)乘除與求模*/%從左到右4算術(shù)加減+-從左到右5移位>>>>><<從左到右6大小關(guān)系運(yùn)算符對(duì)象運(yùn)算符> >= < <= instanceof 從左到右7相等關(guān)系運(yùn)算符== !=從左到右8按位與&從左到右9按位異或^從左到右10按位或|從左到右11邏輯與
條件與&&&從左到右12邏輯或
條件或|||從左到右13條件運(yùn)算符?:從左到右14箭頭運(yùn)算符->從右到左15賦值運(yùn)算符復(fù)合賦值運(yùn)算符=+=-=*=等等從右到左第93頁(yè)第94頁(yè)主要內(nèi)容2.1Java程序的基本元素 2.2變量及其作用域 2.3運(yùn)算符與表達(dá)式 2.4Java流程控制
2.5數(shù)組 2.6本章小結(jié) 2.7思考和練習(xí)
2.4Java流程控制從結(jié)構(gòu)化程序設(shè)計(jì)的角度出發(fā),程序有3種結(jié)構(gòu):順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)。前面我們的程序就都是順序結(jié)構(gòu)的例子,這種程序的執(zhí)行順序是從上到下,按順序執(zhí)行每一條語(yǔ)句,直至程序結(jié)束。而選擇結(jié)構(gòu)則可以根據(jù)某個(gè)條件,有選擇的執(zhí)行或跳過(guò)某些程序段,從而可以改變程序執(zhí)行流程;循環(huán)結(jié)構(gòu)能使程序重復(fù)執(zhí)行一條或多條語(yǔ)句。這兩種結(jié)果都是根據(jù)程序的狀態(tài)變化來(lái)控制程序執(zhí)行流程的。有了這兩種結(jié)構(gòu)在結(jié)合跳轉(zhuǎn)語(yǔ)句,就能夠開(kāi)發(fā)出更具有復(fù)雜業(yè)務(wù)流程的應(yīng)用程序第95頁(yè)選擇結(jié)構(gòu)Java支持兩種選擇結(jié)構(gòu):if語(yǔ)句和switch語(yǔ)句。一個(gè)if語(yǔ)句包含一個(gè)布爾表達(dá)式和一條或多條語(yǔ)句,其一般形式如下:if(condition) statement1;else statement2;其中,statement1和statement2既可以是單條語(yǔ)句,也可以是復(fù)合語(yǔ)句(即代碼塊)。condition是返回布爾值的任何表達(dá)式。第96頁(yè)switch語(yǔ)句switch語(yǔ)句是多分支語(yǔ)句。它從某種程度上能替換前面的多重if語(yǔ)句,但switch語(yǔ)句看起來(lái)更清晰。(1)對(duì)于JDK7以前的版本中,expression必須是byte、short、int、char或枚舉類型(枚舉類型將在后面學(xué)習(xí))。從JDK7開(kāi)始,expression也可以是String類型。(2)switch(expression)后面是一對(duì)大括號(hào),大括號(hào)內(nèi)可以包含多個(gè)case語(yǔ)句。每個(gè)case后面跟一個(gè)要比較的值和冒號(hào)。(3)case語(yǔ)句中的值的數(shù)據(jù)類型必須與expression的數(shù)據(jù)類型兼容,而且必須是唯一的常量或者字面值。(4)將expression的值與case語(yǔ)句中的從上到下開(kāi)始比較,如果遇到相等的,就會(huì)執(zhí)行該case語(yǔ)句之后的所有語(yǔ)句,直到break語(yǔ)句出現(xiàn)才會(huì)跳出switch語(yǔ)句。第97頁(yè)switch語(yǔ)句(5)switch語(yǔ)句可以包含一個(gè)可選的default分支,該分支必須是switch語(yǔ)句的最后一個(gè)分支。default在沒(méi)有case語(yǔ)句的值和expression的值相等的時(shí)候執(zhí)行。default分支不需要break語(yǔ)句。(6)在每個(gè)case子句中,可以使用break語(yǔ)句跳出switch結(jié)構(gòu)。轉(zhuǎn)而執(zhí)行switch結(jié)構(gòu)后面的語(yǔ)句。break語(yǔ)句不是必須的,如果沒(méi)有break語(yǔ)句,那么,程序在執(zhí)行完匹配的case語(yǔ)句后,繼續(xù)執(zhí)行下一條case語(yǔ)句,直到出現(xiàn)break語(yǔ)句或switch語(yǔ)句結(jié)束與if語(yǔ)句不同的是,switch語(yǔ)句只能進(jìn)行相等性測(cè)試,if語(yǔ)句可以對(duì)任何類型的布爾表達(dá)式進(jìn)行求值。而switch語(yǔ)句只查看表達(dá)式的值是否和某個(gè)case常量相匹配。第98頁(yè)switch語(yǔ)句與if語(yǔ)句可以嵌套一樣,switch語(yǔ)句也可以嵌套,因?yàn)閟witch語(yǔ)句定義有自己的代碼塊,所以內(nèi)部switch語(yǔ)句中的case常量和外部switch語(yǔ)句中的case常量之間可以出現(xiàn)相同的值,彼此不會(huì)引起沖突。break語(yǔ)句是可選的。如果在輸入代碼時(shí)遺漏了break語(yǔ)句,編譯器不會(huì)提示我們,但是運(yùn)行程序時(shí),可能得不到我們期望的結(jié)果第99頁(yè)循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)可以將某個(gè)語(yǔ)句塊執(zhí)行多次,直到遇到結(jié)束條件。Java中有3種主要的循環(huán)結(jié)構(gòu):while語(yǔ)句、do...while語(yǔ)句、for語(yǔ)句。第100頁(yè)while循環(huán)while循環(huán)是Java中最基礎(chǔ)的循環(huán)語(yǔ)句。其語(yǔ)法格式如下:while(condition){//循環(huán)體語(yǔ)句}condition可以是任意的布爾表達(dá)式,只要表達(dá)式的值為true,就會(huì)執(zhí)行循環(huán)體語(yǔ)句;然后再次判斷condition的值,如果未true,還繼續(xù)執(zhí)行循環(huán)體語(yǔ)句;直至condition的值為false時(shí),程序控制會(huì)轉(zhuǎn)移到循環(huán)之后的下一行代碼。如果循環(huán)體語(yǔ)句只有一條,可以缺省大括號(hào)。第101頁(yè)do…while循環(huán)在while循環(huán)中,如果控制while循環(huán)的條件表達(dá)式最初為false,那么循環(huán)體就不會(huì)被執(zhí)行。然而,有時(shí)希望循環(huán)體至少執(zhí)行一次,即使條件表達(dá)式最初為false。do...while語(yǔ)句就是這樣的循環(huán)。do...while語(yǔ)句的條件表達(dá)式位于循環(huán)的底部,所以循環(huán)體至少執(zhí)行一次,這是while循環(huán)與do...while循環(huán)的重要區(qū)別。第102頁(yè)do…while循環(huán)一般形式如下:do{//循環(huán)體語(yǔ)句}while(condition);do...while循環(huán)首先執(zhí)行循環(huán)體,然后才對(duì)條件表達(dá)式進(jìn)行判斷,如果條件表達(dá)式為true,就繼續(xù)執(zhí)行循環(huán);否則終止循環(huán)。第103頁(yè)for循環(huán)for循環(huán)是一種強(qiáng)大且非常靈活的結(jié)構(gòu)。通常用在循環(huán)次數(shù)已經(jīng)確定的場(chǎng)景。傳統(tǒng)for語(yǔ)句的一般形式如下:for(initialization;condition;iteration){//循環(huán)體語(yǔ)句}第104頁(yè)for循環(huán)(1)當(dāng)?shù)谝淮伍_(kāi)始循環(huán)時(shí),執(zhí)行循環(huán)的初始化部分initialization。通常該部分用來(lái)初始化循環(huán)控制變量,循環(huán)控制變量作為控制循環(huán)的計(jì)數(shù)器。這部分只執(zhí)行一次。(2)接下來(lái),對(duì)condition進(jìn)行求值。該部分必須是布爾表達(dá)式,通常是包含循環(huán)控制變量的一個(gè)關(guān)系表達(dá)式,如果這個(gè)表達(dá)式的值為true,就執(zhí)行循環(huán)體;如果為false,就終止循環(huán)。(3)循環(huán)體執(zhí)行完以后,執(zhí)行循環(huán)的迭代部分iteration。該部分通常是一個(gè)遞增或遞減循環(huán)控制變量的表達(dá)式。(4)重新對(duì)condition表達(dá)式進(jìn)行求值,回到步驟(2)。第105頁(yè)for循環(huán)for循環(huán)是一個(gè)非常靈活的結(jié)構(gòu),主要體現(xiàn)在它的各個(gè)部分并非只能用于它們的原始目的。只要設(shè)計(jì)合理,它們可以用于我們所期望的任何其他目的。而且每個(gè)部分都可以缺省for(i=1,sum=0;i<=100;i++){sum+=i;}for語(yǔ)句括號(hào)中的3部分都可以缺省,但兩個(gè)分號(hào)不能缺省第106頁(yè)for循環(huán)的for-each版本從JDK5開(kāi)始,定義了for循環(huán)的第二種形式,這種形式實(shí)現(xiàn)了“for-each”風(fēng)格的循環(huán)。for循環(huán)的for-each版本的一般形式如下:for(typeitr-var:collection){ statement-block;}第107頁(yè)循環(huán)的嵌套與所有其他編程語(yǔ)言一樣,Java也允許循環(huán)嵌套。也就是說(shuō),一個(gè)循環(huán)的循環(huán)體語(yǔ)句還可以包含另一個(gè)循環(huán)。例如,下面是一個(gè)嵌套的for循環(huán),該循環(huán)的功能是輸出九九乘法表: for(inti=1;i<=9;i++){ for(intj=1;j<=i;j++){ System.out.print(j+"*"+i+"="+i*j+""); } System.out.println(); }第108頁(yè)跳轉(zhuǎn)語(yǔ)句Java支持3種跳轉(zhuǎn)語(yǔ)句:break語(yǔ)句、continue語(yǔ)句和return語(yǔ)句。這些語(yǔ)句將控制轉(zhuǎn)移到程序的其他部分。前面我們學(xué)習(xí)switch語(yǔ)句時(shí),就使用過(guò)break語(yǔ)句。它可以跳出switch結(jié)構(gòu),接下來(lái)將學(xué)習(xí)使用break語(yǔ)句退出循環(huán)。使用break語(yǔ)句可以強(qiáng)制程序立即終止循環(huán),繞過(guò)條件表達(dá)式和循環(huán)體中剩余的所有語(yǔ)句。在嵌套的循環(huán)中如果使用break語(yǔ)句,那么break語(yǔ)句只中斷當(dāng)前層的循環(huán)。如果循環(huán)體內(nèi)有switch結(jié)構(gòu),那么switch語(yǔ)句中的break語(yǔ)句,只會(huì)影響該switch語(yǔ)句,不會(huì)結(jié)束任何外層循環(huán)。第109頁(yè)continue語(yǔ)句continue只能出現(xiàn)在循環(huán)控制結(jié)構(gòu)中,其作用是讓程序立刻終止本次循環(huán),跳過(guò)循環(huán)體的剩余語(yǔ)句,跳轉(zhuǎn)到下一次循環(huán)的迭代。在for循環(huán)中,continue語(yǔ)句使程序立即跳轉(zhuǎn)到for語(yǔ)句的迭代部分。在while或者do…while循環(huán)中,程序立即跳轉(zhuǎn)到控制循環(huán)的布爾表達(dá)式。第110頁(yè)return語(yǔ)句return語(yǔ)句表示要顯式地從方法返回,該語(yǔ)句導(dǎo)致程序的執(zhí)行控制轉(zhuǎn)移給方法的調(diào)用者。因此,我們將它歸類到跳轉(zhuǎn)語(yǔ)句。該語(yǔ)句的用法將在第3章學(xué)習(xí)方法時(shí)詳細(xì)介紹。第111頁(yè)第112頁(yè)主要內(nèi)容2.1Java程序的基本元素 2.2變量及其作用域 2.3運(yùn)算符與表達(dá)式 2.4Java流程控制 2.5數(shù)組
2.6本章小結(jié) 2.7思考和練習(xí)
2.5數(shù)組前面我們學(xué)習(xí)了如何聲明變量和在變量中存儲(chǔ)數(shù)據(jù)。每個(gè)變量都只能存儲(chǔ)一個(gè)數(shù)據(jù)項(xiàng),如果需要存儲(chǔ)大量的數(shù)據(jù),例如如果需要讀取100個(gè)數(shù),那么就需要定義100個(gè)變量,這顯然是難以接受的方案。為此人們?cè)O(shè)計(jì)了更好的解決方案——數(shù)組。數(shù)組對(duì)于一門編程語(yǔ)言來(lái)說(shuō)是重要的數(shù)據(jù)結(jié)構(gòu)之一,不同語(yǔ)言對(duì)數(shù)組的實(shí)現(xiàn)及處理也不盡相同。Java語(yǔ)言中提供的數(shù)組是用來(lái)存儲(chǔ)固定大小的同類型元素。前面說(shuō)的讀取100個(gè)數(shù)的程序就可以聲明一個(gè)可存儲(chǔ)100個(gè)元素的數(shù)組變量,如numbers[100]來(lái)代替直接聲明100個(gè)獨(dú)立變量number0,number1,....,number99。第113頁(yè)創(chuàng)建數(shù)組數(shù)組是多個(gè)相同類型數(shù)據(jù)的組合,數(shù)組中的每一個(gè)數(shù)據(jù)也叫數(shù)組的一個(gè)元素??梢詣?chuàng)建任意類型的數(shù)組,并且數(shù)組可以是一維或多維的。數(shù)組的創(chuàng)建可分為兩個(gè)步驟:(1)聲明數(shù)組變量(2)為數(shù)組元素分配存儲(chǔ)空間聲明一維數(shù)組變量的一般形式有如下兩種:typevar-name[];type[]var-name;其中,type聲明了數(shù)組的元素類型(也稱為基本類型),元素類型決定了構(gòu)成數(shù)組的每個(gè)元素的類型;var-name是任意合法的標(biāo)識(shí)符。第114頁(yè)創(chuàng)建數(shù)組例如,如果我們要將array指向一個(gè)包含10個(gè)整數(shù)的數(shù)組,可以使用下面的語(yǔ)句:array=newint[10];一旦數(shù)組大小確定后就不能再更改,所以一定要確保創(chuàng)建的數(shù)組能夠滿足需要。創(chuàng)建數(shù)組的兩個(gè)步驟(聲明并且為數(shù)組元素分配內(nèi)存空間)也可以合并為一步,如下:int[]array=newint[10];第115頁(yè)訪問(wèn)數(shù)組元素一旦創(chuàng)建好數(shù)組,數(shù)組中的元素就可以像Java中其他類型的變量一樣使用??梢酝ㄟ^(guò)在方括號(hào)中指定索引的方法來(lái)訪問(wèn)數(shù)組中的特定元素。需要注意的是:數(shù)組元素的索引是從0開(kāi)始,到數(shù)組大小值減1,如前面的array的10個(gè)元素為:array[0]、array[1]、...array[9]。通常,可以使用for循環(huán)來(lái)初始化數(shù)組元素的值,使用增強(qiáng)的for循環(huán)來(lái)遍歷數(shù)組的每個(gè)元素。第116頁(yè)數(shù)組的靜態(tài)初始化聲明數(shù)組、分配存儲(chǔ)空間、為數(shù)組元素賦值,這些操作也可以全部在聲明數(shù)組時(shí)完成,就像聲明簡(jiǎn)單類型變量的同時(shí)初始化一樣。數(shù)組初始化器是一個(gè)位于大括號(hào)中由逗號(hào)分隔的表達(dá)式列表。逗號(hào)用來(lái)分隔每個(gè)數(shù)組元素的值。Java會(huì)根據(jù)初始化器中的值,自動(dòng)創(chuàng)建足夠大的數(shù)組,以容納所有數(shù)組元素。double[]nums={10.1,11.2,12.3,13.4,14.5};double[]nums=newdouble[]{10.1,11.2,12.3,13.4,14.5};第117頁(yè)多維數(shù)組在Java中,多維數(shù)組實(shí)際上是數(shù)組的數(shù)組。例如2維數(shù)組可以看成一個(gè)特殊的一維數(shù)組,其每一個(gè)元素都是一個(gè)一維數(shù)組。例如,下面是聲明了一個(gè)名為twoDim的二維數(shù)組的兩種形式:int[][]twoDim=newint[4][5];inttwoDim[][]=newint[4][5];這條語(yǔ)句分配了一個(gè)4×5的數(shù)組,并將之賦給twoDim。在內(nèi)部,這個(gè)矩陣是作為int數(shù)組的數(shù)組實(shí)現(xiàn)的。第118頁(yè)多維數(shù)組初始化與一維數(shù)組的靜態(tài)初始化一樣,多維數(shù)組也可以在聲明時(shí)給出各元素的初值,只需在一連串的大括號(hào)中包含每一維的初始化器。int[][]twoDim2={{0},{1,2},{3,4,5},{6,7,8,9}};除了二維數(shù)組,還可以創(chuàng)建三維、四維等跟多多維數(shù)組,例如下面的語(yǔ)句定義了一個(gè)三維數(shù)組。int[][][]b={{{1,2,3},{1,2,3}},{{3,4,1},{2,3,4}}};第119頁(yè)第120頁(yè)主要內(nèi)容2.1Java程序的基本元素 2.2變量及其作用域 2.3運(yùn)算符與表達(dá)式 2.4Java流程控制 2.5數(shù)組 2.6本章小結(jié)
2.7思考和練習(xí)
2.6本章小結(jié)本章全面講述了Java語(yǔ)言的基本語(yǔ)法。首先,從Java程序的基本元素講起,介紹了Java標(biāo)識(shí)符和關(guān)鍵字等基本組成。接下來(lái),講述了變量及其作用域,包括基本數(shù)據(jù)類型、變量的聲明與使用等內(nèi)容。后面的運(yùn)算符和表達(dá)式是程序語(yǔ)句的基礎(chǔ),詳細(xì)介紹了Java的所有運(yùn)算符的運(yùn)算規(guī)則和注意事項(xiàng),以及運(yùn)算符的優(yōu)先級(jí)。然后重點(diǎn)介紹了Java的流程控制,包括選擇結(jié)構(gòu)與循環(huán)結(jié)構(gòu)以及跳轉(zhuǎn)語(yǔ)句,這是程序設(shè)計(jì)的幾個(gè)核心流程。最后,簡(jiǎn)要介紹了Java中的數(shù)組,包括創(chuàng)建數(shù)據(jù)、訪問(wèn)數(shù)組元素、數(shù)組的初始化以及多維數(shù)組等內(nèi)容。第121頁(yè)第122頁(yè)主要內(nèi)容2.1Java程序的基本元素 2.2變量及其作用域 2.3運(yùn)算符與表達(dá)式 2.4Java流程控制 2.5數(shù)組 2.6本章小結(jié)
2.7思考和練習(xí)
2.7思考和練習(xí)1.簡(jiǎn)述Java標(biāo)識(shí)符的命名規(guī)則。2.什么是變量,請(qǐng)聲明一個(gè)整型變量。3.如何將float類型的數(shù)據(jù)轉(zhuǎn)換為int類型?4.自增和自減運(yùn)算的兩種形式有和區(qū)別?5.下列(
)不是合法的標(biāo)識(shí)符?
(A)$million
(B)$_million
(C)2$_million
(D)$2_million6.表達(dá)式1+2+"aa"+3的值是()。
(A)"12aa3"(B)"3aa3"(C)"12aa"(D)"aa3"。第123頁(yè)2.7思考和練習(xí)7.下列說(shuō)法中,不正確的是(
)。
(A)switch語(yǔ)句的功能可以由if…else
if語(yǔ)句來(lái)實(shí)現(xiàn)
(B)若用于比較的數(shù)據(jù)類型為double型,則不可以用switch語(yǔ)句來(lái)實(shí)現(xiàn)
(C)switch語(yǔ)句必須有default子句,并且default位于所以case子句后面
(D
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 宿舍樓房出租合同
- 商標(biāo)轉(zhuǎn)讓合同樣本
- 房地產(chǎn)交易經(jīng)紀(jì)合同
- 股份質(zhì)押合同
- 個(gè)人抵押借款合同
- 商品房裝修工程合同范本
- STEAM理念下初中數(shù)學(xué)項(xiàng)目式學(xué)習(xí)的設(shè)計(jì)研究
- 面向小行星探測(cè)的著陸器附著鉆進(jìn)錨固力學(xué)特性研究
- 2025年安陽(yáng)道路貨運(yùn)駕駛員從業(yè)資格證考試題庫(kù)完整
- 高速光通信系統(tǒng)中信號(hào)識(shí)別方法研究
- 《教科版》二年級(jí)科學(xué)下冊(cè)全冊(cè)課件(完整版)
- (2024年)《處方管理辦法》培訓(xùn)課件
- 人工智能在化工生產(chǎn)安全中的應(yīng)用
- 2023年6月浙江高考政治試卷真題解讀及答案解析(課件)
- 銷售部廉政培訓(xùn)課件
- 三年級(jí)計(jì)算題三位數(shù)乘一位數(shù)練習(xí)300題帶答案
- 商務(wù)服務(wù)業(yè)的市場(chǎng)細(xì)分和定位策略
- 財(cái)政學(xué)論文我國(guó)財(cái)政支出存在的問(wèn)題及改革建議
- 2022年湖南高速鐵路職業(yè)技術(shù)學(xué)院?jiǎn)握袛?shù)學(xué)模擬試題及答案解析
- 小學(xué)生必備古詩(shī)
- 人教版英語(yǔ)八年級(jí)上冊(cè)單詞默寫(xiě)表
評(píng)論
0/150
提交評(píng)論