版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第1章 Java語言概述 26 八月 20222 學(xué)習(xí)目的:了解程序設(shè)計(jì)語言的發(fā)展歷史了解Java語言的特色和應(yīng)用背景了解Java虛擬機(jī)、Java的運(yùn)行環(huán)境和Java編程語言開 發(fā)環(huán)境初步掌握簡單Java程序的創(chuàng)建、編譯和運(yùn)行學(xué)習(xí)重點(diǎn)面向?qū)ο蟮某绦蛟O(shè)計(jì)語言 Java虛擬機(jī)Java的運(yùn)行環(huán)境Java程序的創(chuàng)建、編譯和運(yùn)行26 八月 20223第1章 Java語言概述 本章提要: 1. 程序設(shè)計(jì)語言概述 2. Java語言簡介 3. Java語言概述 4. 簡單Java程序的創(chuàng)建、編譯及運(yùn)行步驟 26 八月 202241.1 程序設(shè)計(jì)語言概述 1.1.1 計(jì)算機(jī)程序設(shè)計(jì)方法和語言 隨著計(jì)算機(jī)硬件與
2、通訊技術(shù)的發(fā)展,計(jì)算機(jī)應(yīng)用領(lǐng)域越來越廣泛,應(yīng)用規(guī)模也越來越大,程序設(shè)計(jì)不再是一、兩個(gè)程序員可完成的任務(wù),在這種情況下編寫程序不再片面追求高效率,而是綜合考慮程序的可靠性、可擴(kuò)展性、可重用性和可理解性等因素。 程序設(shè)計(jì)方法是獨(dú)立于具體程序設(shè)計(jì)語言的一門技術(shù)。由于程序設(shè)計(jì)通常離不開程序設(shè)計(jì)語言作為工具,所以容易混淆程序設(shè)計(jì)方法與程序設(shè)計(jì)語言的概念。程序設(shè)計(jì)語言的設(shè)計(jì)目的主要是為了支持某種程序設(shè)計(jì)方法 。26 八月 20225早期的程序設(shè)計(jì) 早期的高級程序設(shè)計(jì)語言有FORTROM、COBOL、BASIC等。這一時(shí)期由于追求程序的高效率,程序員過份依賴技巧與天份,不太注重程序的結(jié)構(gòu),。一個(gè)典型問題是程
3、序中的控制隨意跳轉(zhuǎn),即不加限制地使用goto語句,這樣的程序?qū)﹂喿x者來說是難以理解的,程序員也難以修改程序。結(jié)構(gòu)化的程序設(shè)計(jì) 隨著程序規(guī)模與復(fù)雜性的不斷增長 ,20世紀(jì)60年代誕生了結(jié)構(gòu)化程序設(shè)計(jì)方法。結(jié)構(gòu)化程序設(shè)計(jì)方法的主要技術(shù)是自頂向下、逐步求精,采用單入口/單輸出的控制結(jié)構(gòu)。這一程序設(shè)計(jì)方法的代表語言是Pascal、C、Ado等。26 八月 20226 自頂向下是一種分解問題的技術(shù),與控制結(jié)構(gòu)有關(guān)。逐步求精指對結(jié)構(gòu)化程序進(jìn)行分解,最終使其成為三種基本控制結(jié)構(gòu)的組合。結(jié)構(gòu)化程序設(shè)計(jì)的結(jié)果是一個(gè)程序最終由若干過程組成,每一個(gè)過程完成一個(gè)明確的功能。面向?qū)ο蟪绦蛟O(shè)計(jì) 雖然結(jié)構(gòu)化程序設(shè)計(jì)提高了軟
4、件生產(chǎn)率和軟件質(zhì)量,但隨著程序規(guī)模與復(fù)雜性的增長,程序中的數(shù)據(jù)結(jié)構(gòu)變得與這些數(shù)據(jù)上的操作同樣重要。在大型結(jié)構(gòu)化程序中,一個(gè)數(shù)據(jù)結(jié)構(gòu)可能由許多個(gè)過程來處理,修改數(shù)據(jù)結(jié)構(gòu)將影響到所有相關(guān)的過程。在由幾百個(gè)過程組成的成千上萬行的結(jié)構(gòu)化程序中,這種情況變得相當(dāng)麻煩并且容易產(chǎn)生錯(cuò)誤。 26 八月 20227 20世紀(jì)80年代興起的面向?qū)ο蟪绦蛟O(shè)計(jì)方法在結(jié)構(gòu)化程序設(shè)計(jì)的基礎(chǔ)上提出了一種新的設(shè)計(jì)思路,最重要的改變是程序圍繞被操作的數(shù)據(jù)來設(shè)計(jì),而不是圍繞操作本身。面向?qū)ο蟪绦蛟O(shè)計(jì)以類作為構(gòu)造程序的基本單位,具有封裝、數(shù)據(jù)抽象、繼承、多態(tài)化等特點(diǎn)。較有影響的面向?qū)ο蟪绦蛟O(shè)計(jì)語言有Simula、C+、Java等。
5、 Java語言是在C+語言基礎(chǔ)上發(fā)展起來的一種適合分布式計(jì)算的新型面向?qū)ο蟪绦蛟O(shè)計(jì)語言,也是目前推廣最快的程序設(shè)計(jì)語言。Java語言將面向?qū)ο?、平臺無關(guān)性、穩(wěn)定性與安全性、多線程等特征集于一身,為用戶提供了一個(gè)良好的程序設(shè)計(jì)環(huán)境,特別適合因特網(wǎng)的應(yīng)用開發(fā)。與當(dāng)前迅速發(fā)展的因特網(wǎng)應(yīng)用緊密結(jié)合是Java語言成功的關(guān)鍵所在。 26 八月 202281.1.2 計(jì)算機(jī)程序設(shè)計(jì)方法和語言面向?qū)ο笈c面向過程的區(qū)別 早期的編程語言如Fortran語言和C語言基本上都是面向過程的語言,主要是采用數(shù)學(xué)語言方式編程的語言,其編程的主要思路專注于算法的實(shí)現(xiàn)。 傳統(tǒng)的面向過程的編程在描述問題時(shí),由兩部分組成:數(shù)據(jù):描
6、述實(shí)體狀態(tài)的數(shù)據(jù)結(jié)構(gòu);過程:操作這些狀態(tài)數(shù)據(jù)的程序和步驟。 面向過程編程的一個(gè)顯著特點(diǎn)是數(shù)據(jù)與程序的分開。數(shù)據(jù)是靜止的東西,不會自行變化,必須通過過程操作來改變數(shù)據(jù),因此,函數(shù)調(diào)用在面向過程編程中被大量使用。26 八月 20229 針對程序結(jié)構(gòu)不清晰而無法維護(hù)改進(jìn)的局面。面向?qū)ο缶幊烫岢隽艘环N全新的思路,讓計(jì)算機(jī)語言結(jié)構(gòu)像人類思維方式一樣簡單和清晰。 面向?qū)ο蟮能浖_發(fā)中將世界上的事物均看成對象,任一對象有兩個(gè)特征:行為與狀態(tài)。每個(gè)對象可以通過自身的行為來改變自己的狀態(tài)。在面向?qū)ο蟮氖澜缰?,通過對象間的協(xié)作與交互來運(yùn)作。由于將對象的操作封閉在對象內(nèi),外部要與對象進(jìn)行交互只能通過給對象發(fā)送“消息
7、”,這個(gè)消息實(shí)際上就是調(diào)用對象的某個(gè)行為方法,消息中還包括方法的參數(shù)。26 八月 202210面向?qū)ο蟪绦蛟O(shè)計(jì)的特性封裝性 面向?qū)ο蟮牡谝粋€(gè)原則是把數(shù)據(jù)和該數(shù)據(jù)的操作都封裝在一個(gè)類中,比如說筆記本電腦就是一個(gè)類。筆記本電腦這個(gè)類有許多屬性,有些是靜態(tài)的(數(shù)據(jù)),比如:顯示屏的亮度,本身的重量;有些是動(dòng)態(tài)的(對數(shù)據(jù)的操作),比如:可以按下組合鍵“ctrl+F4”或“ctrl+F5”來調(diào)整顯示器的亮度,可以卸掉它的外掛光驅(qū)來減輕它的重量。 對象是類的一個(gè)實(shí)例化結(jié)果,對象具有類所描述的所有的屬性以及方法。比如不同品牌、不同樣式的筆記本電腦之間的共同屬性就是它們所屬的類筆記本電腦類的屬性。只不過類是抽
8、象的東西,而對象是具體的,對象具有它隸屬類的所有屬性,包括靜態(tài)的和動(dòng)態(tài)的。26 八月 202211 每個(gè)對象都有自己的存儲空間,可容納其他對象,或者說通過封裝現(xiàn)有的對象,可以產(chǎn)生新型對象。因此,盡管對象的概念非常簡單,但是經(jīng)過封裝以后卻可以在程序中達(dá)到任意高的復(fù)雜程度。 每個(gè)對象都屬于某個(gè)類。根據(jù)語法,每個(gè)對象都是某個(gè)“類”的實(shí)例。一個(gè)類的最重要的特征就是“能將什么消息發(fā)給它?”,也就是類本身有哪些操作。面向?qū)ο蟪绦蛟O(shè)計(jì)就是設(shè)計(jì)好相關(guān)的類,類中有靜態(tài)的域,和動(dòng)態(tài)的方法。繼承性 繼承是在類、子類、以及對象之間自動(dòng)地共享屬性和方法的機(jī)制。類的上層可以有父類、下層可以有子類,形成一種層次結(jié)構(gòu)。一個(gè)類
9、將直接繼承其父類的屬性和行為26 八月 202212,而且繼承還具有傳遞性,因此,它還將間接繼承所有祖先類的屬性和行為。 繼承最主要的優(yōu)點(diǎn)是重復(fù)使用性,通過繼承可以無限繁衍出更多的類,這樣的結(jié)果可讓軟件的開發(fā)加速,同時(shí)可達(dá)到程序共享的好處。通過繼承可以直接繼承系統(tǒng)提供的或他人寫作的類,并加以改寫,進(jìn)而得到功能的不斷擴(kuò)充。 繼承的另一個(gè)優(yōu)點(diǎn)是在于接口的一致性。當(dāng)超類繁衍出許多子類時(shí),它的行為接口通過繼承可以傳給其所有子類。因此可以通過統(tǒng)一的行為接口去訪問不同的子類對象的方法,但不同子類中行為的具體實(shí)現(xiàn)可能時(shí)不一樣的。26 八月 202213多態(tài)性 多態(tài)是指在表示特定功能時(shí),有多種不同的形態(tài)或?qū)崿F(xiàn)
10、方法。常見的多態(tài)形式有兩種:方法的重載:即在同一個(gè)類中某個(gè)方法有多種形態(tài),其方法名相同,但參數(shù)不同,所以也稱參數(shù)多態(tài)。方法的覆蓋:在子類中重新定義一個(gè)與父類有相同形態(tài)的方法,這樣,在子類中將覆蓋從父類繼承來的那個(gè)方法。 多態(tài)為描述客觀事物提供了極大的能動(dòng)性。參數(shù)多態(tài)提供了方法的多種使用形態(tài),方便使用者的調(diào)用;而覆蓋多態(tài)則使得用戶可以用同樣的方式對待不同的對象,不同的對象可以用它們自己的方式響應(yīng)同一消息。用戶可以通過父類去引用子類的對象,執(zhí)行方法時(shí)則表現(xiàn)出每個(gè)子類對象各自的行為。 26 八月 202214抽象性 這里的抽象有兩個(gè)層次的含義,一是體現(xiàn)在類的層次設(shè)計(jì)中,高層類是底層類的抽象表述。類層
11、次設(shè)計(jì)體現(xiàn)著不斷抽象的過程。第二體現(xiàn)在類與對象之間的關(guān)系上,類是一個(gè)抽象的概念,而對象是具體的。面向?qū)ο缶幊痰暮诵氖窃O(shè)計(jì)類,但實(shí)際運(yùn)行操作的是對象。類是對象的模板,對象的創(chuàng)建是以類為基礎(chǔ)。同一類創(chuàng)建的對象具有共同的屬性,但屬性值不同。26 八月 2022151.2 程序設(shè)計(jì)語言概述Java語言有下面一些特點(diǎn):簡單性 Java語言是一種面向?qū)ο蟮恼Z言,它通過提供最基本的方法來完成指定的任務(wù),只需理解一些基本的概念,就可以用它編寫出適合于各種情況的應(yīng)用程序。Java略去了運(yùn)算符重載、多重繼承等模糊的概念 ,并且通過實(shí)現(xiàn)自動(dòng)垃圾收集大大簡化了程序設(shè)計(jì)者的內(nèi)存管理工作。另外,Java也適合于在小型機(jī)上
12、運(yùn)行。 1.2.1 Java語言的特色26 八月 202216面向?qū)ο?Java語言的設(shè)計(jì)集中于對象及其接口,它提供了簡單的類機(jī)制以及動(dòng)態(tài)的接口型。對象中封裝了它的狀態(tài)變量以及相應(yīng)的方法,實(shí)現(xiàn)了模塊化和信息隱藏;而類則提供了一類對象的原型,并且通過繼承機(jī)制,子類可以使用父類所提供的方法,實(shí)現(xiàn)了代碼的復(fù)用。分布性 Java是面向網(wǎng)絡(luò)的語言。通過它提供的類庫可以處理 TCP/IP協(xié)議,用戶可以通過 URL地址在網(wǎng)絡(luò)上很方便地訪問其它對象。 26 八月 202217魯棒性 Java在編譯和運(yùn)行程序時(shí),都要對可能出現(xiàn)的問題進(jìn)行檢查,以消除錯(cuò)誤的產(chǎn)生。它提供自動(dòng)垃圾收集來進(jìn)行內(nèi)存管理,防止程序員在管理內(nèi)
13、存時(shí)容易產(chǎn)生的錯(cuò)誤。通過集成的面向?qū)ο蟮睦馓幚頇C(jī)制,在編譯時(shí),Java提示出可能出現(xiàn)但未被處理的例外,幫助程序員正確地進(jìn)行選擇以防止系統(tǒng)的崩潰。另外,Java在編譯時(shí)還可捕獲類型聲明中的許多常見錯(cuò)誤,防止動(dòng)態(tài)運(yùn)行時(shí)不匹配問題的出現(xiàn)。26 八月 202218安全性 用于網(wǎng)絡(luò)、分布環(huán)境下的Java必須要防止病毒的入侵。Java不支持指針,一切對內(nèi)存的訪問都必須通過對象的實(shí)例變量來實(shí)現(xiàn),這樣就防止程序員使用“特洛伊”木馬等欺騙手段訪問對象的私有成員,同時(shí)也避免了指針操作中容易產(chǎn)生的錯(cuò)誤。體系結(jié)構(gòu)中立 Java解釋器生成與體系結(jié)構(gòu)無關(guān)的字節(jié)碼指令,只要安裝了Java運(yùn)行時(shí)系統(tǒng),Java程序就可在任意
14、的處理器上運(yùn)行。這些字節(jié)碼指令對應(yīng)于Java虛擬機(jī)中的表示,Java解釋器得到字節(jié)碼后,對它進(jìn)行轉(zhuǎn)換,使之能夠在不同的平臺運(yùn)行。 26 八月 202219可移植性 與平臺無關(guān)的特性使 Java程序可以方便地被移植到網(wǎng)絡(luò)上的不同機(jī)器。同時(shí),Java的類庫中也實(shí)現(xiàn)了與不同平臺的接口,使這些類庫可以移植。另外,Java編譯器是由Java語言實(shí)現(xiàn)的,Java運(yùn)行時(shí)系統(tǒng)由標(biāo)準(zhǔn)C實(shí)現(xiàn),這使得Java系統(tǒng)本身也具有可移植性。解釋執(zhí)行 Java解釋器直接對Java字節(jié)碼進(jìn)行解釋執(zhí)行。字節(jié)碼本身攜帶了許多編譯時(shí)信息,使得連接過程更加簡單。高性能 和其它解釋執(zhí)行的語言如BASIC、TCL不同,Java字節(jié)碼的設(shè)計(jì)
15、使之能很容易地直接轉(zhuǎn)換成對應(yīng)于特定CPU的機(jī)器碼,從而得到較高的性能。26 八月 202220多線程 多線程機(jī)制使應(yīng)用程序能夠并行執(zhí)行,而且同步機(jī)制保證了對共享數(shù)據(jù)的正確操作。通過使用多線程,程序設(shè)計(jì)者可以分別用不同的線程完成特定的行為,而不需要采用全局的事件循環(huán)機(jī)制,這樣就很容易地實(shí)現(xiàn)網(wǎng)絡(luò)上的實(shí)時(shí)交互行為。動(dòng)態(tài)性 Java的設(shè)計(jì)使它適合于一個(gè)不斷發(fā)展的環(huán)境。在類庫中可以自由地加入新的方法和實(shí)例變量而不會影響用戶程序的執(zhí)行。并且Java通過接口來支持多重繼承,使之比嚴(yán)格的類繼承具有更靈活的方式和擴(kuò)展性。26 八月 2022211.2.2 Java的應(yīng)用背景Java語言對軟件開發(fā)技術(shù)的影響 Ja
16、va語言將對未來軟件的開發(fā)產(chǎn)生影響 ,可從如下幾個(gè)方面考慮 : 軟件的需求分析:可將用戶的需求進(jìn)行動(dòng)態(tài)的、可視化描述,以提供設(shè)計(jì)者更加直觀的要求。而用戶的需求是各色各樣的,不受地區(qū)、行業(yè)、部門、愛好的影響,都可以用 Java語言描述清楚。 軟件的開發(fā)方法:由于 Java語言的面向目標(biāo)的特性,所以完全可以用面向?qū)ο蟮募夹g(shù)與方法來開發(fā),這是符合最新的軟件開發(fā)規(guī)范要求的。 26 八月 202222Java語言的動(dòng)畫效果遠(yuǎn)比GUI技術(shù)更加逼真,尤其是利用Internet提供的巨大動(dòng)畫資源空間,可以共享全世界的動(dòng)態(tài)畫面的資源。 軟件最終產(chǎn)品:用Java語言開發(fā)的軟件可以具有可視化、可聽化、可操作化的交互
17、、動(dòng)畫與動(dòng)作,要它停就停,要它繼續(xù)就繼續(xù),而這是在電影與電視播放過程中難以做到的。 其它:使用Java語言對開發(fā)效益、開發(fā)價(jià)值都有比較明顯的影響。 26 八月 202223Java語言的應(yīng)用前景 Java語言有著廣泛的應(yīng)用前景,大體上可以從以下幾個(gè)方面來考慮其應(yīng)用:所有面向?qū)ο蟮膽?yīng)用開發(fā),包括面向?qū)ο蟮氖录枋?、處理、綜合等。計(jì)算過程的可視化、可操作化的軟件的開發(fā)。動(dòng)態(tài)畫面的設(shè)計(jì),包括圖形圖像的調(diào)用。交互操作的設(shè)計(jì)(選擇交互、定向交互、控制流程等)。Internet的系統(tǒng)管理功能模塊的設(shè)計(jì),包括 Web頁面的動(dòng)態(tài)設(shè)計(jì)、管理和交互操作設(shè)計(jì)等。Intranet(企業(yè)內(nèi)部網(wǎng))上的軟件開發(fā) (直接面向
18、企業(yè)內(nèi)部用戶的軟件)。與各類數(shù)據(jù)庫連接查詢的SQL語句實(shí)現(xiàn) 。其它應(yīng)用類型的程序。26 八月 2022241.3 程序設(shè)計(jì)語言簡介 用Java可寫兩種類型的程序:小程序(又叫Java Applet)和應(yīng)用程序(Java applicatian)。 小程序是嵌入在HTML文檔種的Java程序;而Java應(yīng)用程序是從命令行運(yùn)行的程序。對Java而言,Java小程序的大小和復(fù)雜性都沒有限制。 由于WWW使小程序的發(fā)布十分便利,因此小程序更適合作為Internet上的應(yīng)用程序。 應(yīng)用程序(Java Application)是可以獨(dú)立運(yùn)行的Java程序,有Java解釋器控制執(zhí)行。Applet則不能獨(dú)立運(yùn)
19、行,而是被嵌入到Web頁中,有Java兼容瀏覽器控制執(zhí)行。 26 八月 202225 Java程序在編譯后生成的不是某種CPU的指令碼,而是Java語言特有的字節(jié)代碼。Java字節(jié)代碼運(yùn)行在Java虛擬機(jī)上。 每一個(gè)操作系統(tǒng)的Java解釋器是不同的,但實(shí)現(xiàn)Java虛擬機(jī)時(shí)相同的,這就是Java語言與平臺無關(guān)的關(guān)鍵所在。Java虛擬機(jī)由五部分組成:一組指令集、一組寄存器、一個(gè)堆棧、一個(gè)無用內(nèi)存單元收集器、一個(gè)方法區(qū)域,這五個(gè)部分是Java虛擬機(jī)的邏輯抽象成分,不倚賴于任何實(shí)現(xiàn)技術(shù)或組織,但是它們的功能必須在真實(shí)機(jī)器上以某種來實(shí)現(xiàn)。Java虛擬機(jī)內(nèi)存區(qū)域不倚賴實(shí)現(xiàn)內(nèi)存的位置,也不要求連續(xù),但要求邏
20、輯的長度固定。 1.3.1 Java的虛擬機(jī)26 八月 202226 Java虛擬機(jī)支持240多個(gè)字節(jié)代碼,每個(gè)字節(jié)代碼執(zhí)行一種基本的CPU運(yùn)算。Java語言指令集相當(dāng)于Java語言程序的“匯編語言”,Java語言指令集的一條指令有一個(gè)操作碼、領(lǐng)個(gè)或多個(gè)操作數(shù)。操作數(shù)指定實(shí)施的操作,操作數(shù)是操作碼所需要的參數(shù)。Java語言的操作碼均為一個(gè)字節(jié)長,操作數(shù)沒有限制。 Java虛擬機(jī)的寄存器用于保存機(jī)器的運(yùn)行狀態(tài)。Java虛擬機(jī)寄存器有四種:Java語言程序計(jì)數(shù)器;指向操作數(shù)棧頂端的指針;指向當(dāng)前執(zhí)行方法的執(zhí)行環(huán)境的指針;指向當(dāng)前執(zhí)行方法局部變量的區(qū)第一個(gè)變量的指針。Java虛擬機(jī)是用堆棧來處理數(shù)據(jù)
21、傳遞的,它不定義或使用寄存器來傳遞或接受參數(shù)。目的是為了保證指令集的簡潔性和實(shí)現(xiàn)時(shí)的高效性。26 八月 202227 Java虛擬機(jī)的堆棧有三個(gè)區(qū)域:局部變量區(qū)、執(zhí)行環(huán)境區(qū)和操作數(shù)區(qū)。 Java虛擬機(jī)的堆棧是運(yùn)行時(shí)刻動(dòng)態(tài)分配的對象存儲區(qū)域。Java語言可以進(jìn)行自動(dòng)的無須內(nèi)存單元的收集,程序無須顯示釋放占有的內(nèi)存空間,無須內(nèi)存單元自動(dòng)回收的算法倚賴于虛擬機(jī)最終實(shí)現(xiàn)的硬件環(huán)境。 Java虛擬機(jī)的方法區(qū)是編譯后的代碼區(qū)域,包含方法代碼、符號表等。 26 八月 2022281.3.2 Java的運(yùn)行環(huán)境的配置 Java不僅提供了一個(gè)豐富的語言和運(yùn)行環(huán)境,而且還提供了一個(gè)免費(fèi)的Java開發(fā)工具集(Jav
22、a Developers Kits,簡稱JDK,也稱SDK)。編程人員和最終用戶可以利用這些工具來開發(fā)Java程序或調(diào)用Java內(nèi)容。 SUN的Java不僅提了一個(gè)豐富的語言和運(yùn)行環(huán)境,而且還提了一個(gè)免費(fèi)的Java開發(fā)工具集(SDK)。開發(fā)人員和最終用戶可以利用這個(gè)工具來開發(fā)Java程序。 SDK簡單易學(xué),可以通過任何文本編輯器編寫Java源文件,然后在DOS狀況下利通過javac命令將Java源程序編譯成字節(jié)碼,通過Java命令來執(zhí)行編譯后的Java文件。 26 八月 202229 SDK的另一個(gè)顯著特點(diǎn)是隨著Java (J2EE、J2SE以及J2ME)版本的升級而升級。但它的缺點(diǎn)也是非常明
23、顯的就是從事大規(guī)模企業(yè)級Java應(yīng)用開發(fā)非常困難,不能進(jìn)行復(fù)雜的Java軟件開發(fā),也不利于團(tuán)體協(xié)同開發(fā)。建立Java開發(fā)環(huán)境JDK開發(fā)環(huán)境中常用工具介紹在Java環(huán)境中的Java工具主要有: *appletviewer 小應(yīng)用程序?yàn)g覽器*java 解釋器*javac 編譯器*javah 頭文件生成器*javadocAPI 文檔生成器*javap 類文件反匯編器*sdb Java語言調(diào)試器26 八月 2022301.3.1 Java的虛擬機(jī) 目前可供開發(fā)人員選擇得Java語言開發(fā)工具有很多,例如:Sun公司的SDK(命令行方式的)Java語言編輯器,用Java語言開發(fā)的圖形化界面的Java Wo
24、rkShop,Symmatec公司的Visual Caf,微軟公司的Visual J,Borland公司的JBuilder等等。 開發(fā)人員選擇開發(fā)工具可以根據(jù)以下原則:開發(fā)界面是否友好,編譯效率是否高,是否有可視化的調(diào)試器,能否在瀏覽器中調(diào)試Java語言小程序,能否為使用者完成一些重復(fù)的勞動(dòng)等。26 八月 2022311.4簡單Java程序的創(chuàng)建、編譯及運(yùn)行步驟 Java是解釋型的高級編程語言,所以Java程序的開發(fā)通常需要編寫源程序、編譯生成字節(jié)碼和運(yùn)行幾個(gè)過程。編寫源程序 編寫源程序是程序開發(fā)的第一步,我們只需要簡單的文字編輯器,如Edit或記事本或集成開發(fā)環(huán)境中的編輯窗口,利用這些文字編
25、輯器將源程序錄入到計(jì)算機(jī)中,形成一個(gè)文件保存起來。注意必須要保證Java程序是無格式的純文本文件。 26 八月 202232編譯和運(yùn)行HelloWorld應(yīng)用程序 我們利用Java的編譯器系統(tǒng)軟件,一般采用Sun公司提供的javac.exe。 如果編譯成功,則生成以類命名、以class為后綴的字節(jié)碼文件;否則報(bào)告錯(cuò)誤。 要運(yùn)行一個(gè)編譯好的Java字節(jié)碼程序,還需要調(diào)用Java的解釋器軟件java.exe。 26 八月 2022331.5 本章小結(jié) 本章介紹了Java語言的產(chǎn)生和特點(diǎn)。給出了兩種Java程序,Java應(yīng)用程序和Java Applet程序的調(diào)試步驟。Java Application
26、在命令方式下進(jìn)行調(diào)試,而Java Applet在瀏覽器的環(huán)境下運(yùn)行。Java語言是一門純面向?qū)ο蟮木幊陶Z言。 面向?qū)ο缶幊痰乃悸氛J(rèn)為程序都是對象的組合,因此要克服面向過程編程的思路,直接按照對象和類的思想去組織程序,面向?qū)ο笏哂械姆庋b性、繼承性、多態(tài)性等特點(diǎn)使其具有強(qiáng)大的生命力。 26 八月 202234 Sun公司為全世界Java開發(fā)人員提供了一套免費(fèi)的軟件開發(fā)包Java2 SDK,也稱為JDK,它不僅是Java的開發(fā)平臺,還是Java的運(yùn)行平臺。Java源程序存放在.java文件中,可以通過任意一個(gè)文本編輯器編輯產(chǎn)生,源程序經(jīng)過“javac”命令編譯過后,就生成了相應(yīng)的.class文件。
27、第2章 Java語言基礎(chǔ) 26 八月 202236 學(xué)習(xí)目的: 了解Java程序的構(gòu)成 了解Java的基本數(shù)據(jù)類型 了解Java的運(yùn)算符與表達(dá)式 了解數(shù)組的創(chuàng)建、定義和使用 掌握J(rèn)ava流程控制語句 初步掌握java簡單程序的編寫 學(xué)習(xí)重點(diǎn): Java的基本數(shù)據(jù)類型 、運(yùn)算符與表達(dá)式 一維數(shù)組和多維數(shù)組的創(chuàng)建、定義和使用While、do-while和for語句的使用26 八月 202237第2章 Java語言基礎(chǔ) 本章提要: 1. Java程序的構(gòu)成 2. Java的基本數(shù)據(jù)類型 3. Java的運(yùn)算符與表達(dá)式 4. 數(shù)組 5. Java流程控制語句 26 八月 2022382.1 Java程
28、序的構(gòu)成 Java源程序是由類定義組成的,每個(gè)程序中可以定義若干個(gè)類,但是只有一個(gè)類是主類。在Java Application中,這個(gè)主類是指包含main方法的類;在Java Applet中,這個(gè)主類是一個(gè)系統(tǒng)類Applet的子類,是Java程序執(zhí)行的入口點(diǎn)。在同一個(gè)Java源程序中定義的若干類之間沒有嚴(yán)格的邏輯關(guān)系要求,但它們通常是在一起協(xié)同工作的,每一個(gè)類都可能需要使用其他類中定義的靜態(tài)屬性或方法 。 Java程序中定義類使用關(guān)鍵字class,每個(gè)類的定義有類頭定義和類體定義兩部分組成。類體部分用來定義靜態(tài)屬性和方法這兩種類的成員,其中方法類似于其他高級語2.1.1一個(gè)Java源程序26
29、八月 202239言的函數(shù),而靜態(tài)屬性則類似于變量。類頭部分除了聲明類名之外,還可以說明類的繼承特性,當(dāng)一個(gè)類被定義為是另一個(gè)已經(jīng)存在的類(稱為這個(gè)類的父類)的子類時(shí),它就可以從其父類中繼承一些以定義好的類成員而不必自己重復(fù)編碼。 Java程序的每一條Java語句都由分號結(jié)束,其構(gòu)成應(yīng)該符合Java的語法規(guī)則。類和方法中的所有語句應(yīng)該使用一對大括號括起。Java程序的每一個(gè)類中,除了靜態(tài)屬性聲明語句之外,其他的執(zhí)行具體操作的語句只能存在于類方法的大括號之中,而不能跳出方法孤立地直接書寫在類中。 26 八月 202240 注解是指程序中用來說明程序的文字。它是為了方便程序員理解,維護(hù)該程序,并不
30、參與程序的編譯執(zhí)行。Java的注解有3種:單行注解符號“/”后面的單行內(nèi)容不參與編譯;多行注解用“/*/”包含起來的一段文本,中間可以換行;用“/*/”包含起來的,它可以用javadoc工具來生成HTML形式的開發(fā)文檔。也可以在寫程序的時(shí)候?qū)⒛承┐a注釋掉以便調(diào)試程序。2.1.1 Java的程序注解26 八月 2022412.1.3 Java的的標(biāo)識符與關(guān)鍵字 關(guān)鍵字是Java語言保留的字符串,表示特殊的指令,而不能用來做為程序中的標(biāo)識符。標(biāo)識符是用來代表程序中一個(gè)元素的名字,比如變量、函數(shù)、類等。在Java中標(biāo)識符由字母、下劃線、“$”和數(shù)字組成,只能以字母、“$”或者“_”開頭,中間不能有
31、空格,并且不能使用關(guān)鍵字。但可以包含關(guān)鍵字作為它的名字的一部分。在Java中中文字符也是字符,所以也可以作標(biāo)識符。Java的標(biāo)識符區(qū)分大小寫,而且沒有長度的限制,可以為標(biāo)識符取任意長度的名字。標(biāo)識符的名字要有一定的意義,讓人一看標(biāo)識符就知道這個(gè)變量、函數(shù)的大概作用,即常說的編碼規(guī)范。 26 八月 202242 在Java語言中,有三種基本類型,即簡單類型(整型、浮點(diǎn)型、字符型、布爾型等)、數(shù)組類型(整型、浮點(diǎn)型、字符型、布爾型等)和復(fù)合類型(類、接口)。可以看出Java的數(shù)據(jù)類型與C語言相近,其不同之處在于:首先,Java的各種數(shù)據(jù)類型占用固定的內(nèi)存長度,與具體的軟硬件平臺環(huán)境無關(guān);其次,Ja
32、va的每種數(shù)據(jù)類型都對應(yīng)一個(gè)缺省的數(shù)值,使得這種數(shù)據(jù)類型的變量的取值總是確定的。這兩點(diǎn)分別體現(xiàn)了Java的跨平臺特性和安全穩(wěn)定性。 2.2基本數(shù)據(jù)類型26 八月 202243 在Java語言中有四種整數(shù)類型,每種類型可以使用關(guān)鍵字byte,short,int和long中的任意一個(gè)進(jìn)行聲明。所有Java編程語言中的整數(shù)類型都是帶符號的數(shù)字,不存在無符號整數(shù)。整數(shù)類型的文字可使用十進(jìn)制、八進(jìn)制和十六進(jìn)制表示。首位為“0”表示八進(jìn)制的數(shù)值,首位為“0 x”表示十六進(jìn)制的數(shù)值。整數(shù)類型默認(rèn)為int類型,如在其后有一個(gè)字母“L”表示一個(gè)long值(也可以用小寫“l(fā)”)。 2.2.1 整型 26 八月 2
33、02244 使用char類型可表示單個(gè)字符,字符是用單引號括起來的一個(gè)字符,如a,B等。Java中的字符型數(shù)據(jù)是16位無符號型數(shù)據(jù),它表示Unicode集,而不僅僅是ASCII集。 與C語言類似,Java也提供轉(zhuǎn)義字符,以反斜杠“”開頭,將其后的字符轉(zhuǎn)變?yōu)榱硗獾暮x 。 值得注意的一點(diǎn)是,用雙引號引用的文字,就是我們平時(shí)所說的字符串類型不是原始類型,而是一個(gè)類string,它被用來表示字符序列。字符本身符合Unicode 標(biāo)準(zhǔn)且上述char類型的轉(zhuǎn)義字符適用于string。2.2.2 字符型 26 八月 202245 2.2.3 浮點(diǎn)型 在Java語言中有兩種浮點(diǎn)數(shù)類型;float和doubl
34、e。如果一個(gè)數(shù)包括小數(shù)點(diǎn)或指數(shù)部分,或者在數(shù)字后帶有字母F或f(float)、D或d(double),則該數(shù)為浮點(diǎn)數(shù)。如果不明確指明浮點(diǎn)數(shù)的類型,浮點(diǎn)數(shù)默認(rèn)為double。 在兩種類型的浮點(diǎn)數(shù)中,float為32位(單精度),double為64位(雙精度)。也就是說double類型的浮點(diǎn)數(shù)具有更高的精度。 2.2.4 邏輯型 邏輯類boolean的數(shù)據(jù)類型有兩種文字值:true和false。在Java語言中boolean類型只允許使用boolean值,在整數(shù)類型和boolean類型之間無轉(zhuǎn)換計(jì)算。26 八月 202246 2.2.5 變量與常量 在Java中,不同類型的數(shù)據(jù)既可以以常量的形式出
35、現(xiàn),也可以以變量的形式出現(xiàn)。常量就是指在程序執(zhí)行期間其值不能發(fā)生變化的數(shù)據(jù),常量是固定的。 變量的值是可以變化的,它的定義包括變量名、變量類型和作用域幾個(gè)部分。注意以下幾點(diǎn):(1)變量名必須是一個(gè)合法的標(biāo)識符。變量名應(yīng)具有一定的含義,以增加程序的可讀性。(2)變量類型可以為前面所說的任意一種數(shù)據(jù)類型。(3)聲明一個(gè)變量的同時(shí)也就指明了變量的作用域。變量的作用域指明可訪問該變量的一段代碼。 (4)變量的聲明中多個(gè)變量間用逗號隔開。(5)在Java程序中聲明變量后,需要給該變量賦值。可以用賦值語句來初始化變量任何變量都不能沒有初始值,否則無法通過編譯。26 八月 202247 Java語言是支持兩
36、個(gè)不同數(shù)值類型之間的強(qiáng)制類型轉(zhuǎn)換的,一個(gè)變量從一個(gè)類型強(qiáng)制轉(zhuǎn)換到另一個(gè)類型,轉(zhuǎn)化后的變量要受到新類型的制約。 類型轉(zhuǎn)換語法格式: (type) variableName 類型 變量名 2.2.6數(shù)據(jù)類型的轉(zhuǎn)換26 八月 202248自動(dòng)類型轉(zhuǎn)換 整型、浮點(diǎn)型、字符型數(shù)據(jù)可以混合運(yùn)算。在運(yùn)算中不同類型的數(shù)據(jù)先轉(zhuǎn)化為同一種類型然后進(jìn)行計(jì)算。自動(dòng)類型轉(zhuǎn)換原則是從在機(jī)器中占位(bit)少的類型向占位多的類型方向進(jìn)行轉(zhuǎn)換 。強(qiáng)制類型轉(zhuǎn)換 在Java語言中強(qiáng)制類型轉(zhuǎn)換是指從在機(jī)器中占位多的類型向占位少的類型方向進(jìn)行轉(zhuǎn)換,例如int類型轉(zhuǎn)換成byte類型。強(qiáng)制類型轉(zhuǎn)換需要使用類型轉(zhuǎn)換語法格式,但是有些類型是
37、不允許轉(zhuǎn)換成另一種類型的,例如boolean類型不能轉(zhuǎn)換成int等類型。26 八月 202249 2.3運(yùn)算符與表達(dá)式 Java語言的運(yùn)算符(operator)指明對操作數(shù)所進(jìn)行的運(yùn)算,運(yùn)算符按照操作數(shù)的數(shù)目來劃分為單目運(yùn)算符(例如、+)、雙目運(yùn)算符(例如+、)、三目運(yùn)算符(例如?:)?;具\(yùn)算符包括賦值運(yùn)算符、算術(shù)運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符、位運(yùn)算符、條件運(yùn)算符等。 Java語言的表達(dá)式是由標(biāo)識符、數(shù)據(jù)和運(yùn)算符等的組合而構(gòu)成的,它基本上和CC+語言的表達(dá)式一樣。26 八月 202250 2.3.1 賦值 賦值運(yùn)算符“=”把一個(gè)數(shù)據(jù)賦給另一個(gè)變量。Java語言支持簡單算術(shù)運(yùn)算符和賦值運(yùn)算符
38、的作用在賦值運(yùn)算符兩側(cè)的類型不一致的情況下,如果左側(cè)變量的數(shù)據(jù)類型的級別高,則就把右側(cè)的數(shù)據(jù)轉(zhuǎn)換為與左側(cè)相同的高級數(shù)據(jù)類型,然后賦值給左側(cè)的變量。否則需要使用強(qiáng)制類型轉(zhuǎn)換運(yùn)算符。 在賦值符“=”前加上其他運(yùn)算符,即構(gòu)成擴(kuò)展賦值運(yùn)算符 。用擴(kuò)展賦值運(yùn)算符可表示為: var operator=expression26 八月 202251 2.3.2 算術(shù)運(yùn)算 算術(shù)運(yùn)算是針對數(shù)值類型操作數(shù)進(jìn)行的運(yùn)算。根據(jù)需要參與運(yùn)算的操作數(shù)的數(shù)目要求,可將算術(shù)運(yùn)算符分為雙目運(yùn)算符和單目運(yùn)算符兩種。雙目算術(shù)運(yùn)算符 雙目運(yùn)算符有:+、-、*、/、%五種。要注意“/”運(yùn)算符對于與整數(shù)和浮點(diǎn)數(shù)的運(yùn)算結(jié)果是不同的。取模運(yùn)算符
39、“%”一般用于整數(shù)運(yùn)算,它是用來得到余數(shù)部分。 單目算術(shù)運(yùn)算符 變量的自增與自減和+與出現(xiàn)在該變量的前后位置無關(guān)。無論是+x還是x+均表示x要增1,且表達(dá)式的值與運(yùn)算符的位置有關(guān)。26 八月 202252 2.3.3 關(guān)系運(yùn)算 關(guān)系運(yùn)算符也稱為比較運(yùn)算符,是用于比較兩個(gè)數(shù)據(jù)之間的大小關(guān)系的運(yùn)算符。關(guān)系運(yùn)算結(jié)果是布爾值(true或false)。 2.3.4 邏輯運(yùn)算 邏輯運(yùn)算是針對布爾型數(shù)據(jù)進(jìn)行的邏輯判斷運(yùn)算,運(yùn)算的結(jié)果仍然是布爾型量。常用的邏輯運(yùn)算符有:與(AND)、或(OR)、非(NOT)。 26 八月 202253 2.3.5 位運(yùn)算 位運(yùn)算是對操作數(shù)以二進(jìn)制比特位為單位進(jìn)行的操作運(yùn)算,位
40、運(yùn)算的操作數(shù)和結(jié)果都是整型量。移位運(yùn)算符 移位運(yùn)算符是將某一變量所包含的各比特位按指定方向移動(dòng)指定的位數(shù),移位運(yùn)算符通過對第一個(gè)運(yùn)算對象向左移位或向右移位來對數(shù)據(jù)執(zhí)行位操作,移動(dòng)的位數(shù)由右邊的操作數(shù)決定,移位的方向取決于運(yùn)算符本身。按位邏輯運(yùn)算 位運(yùn)算符&、|、分別提供了基于位的與、或、求反、異或操作。其中異或是指對應(yīng)的兩位數(shù)值不同時(shí),結(jié)果為1,否則為0。 26 八月 202254 2.3.6 其他運(yùn)算幾點(diǎn)說明:條件運(yùn)算符是唯一的一個(gè)三目運(yùn)算符,其結(jié)構(gòu)如下: 條件?表達(dá)式1:表達(dá)式2其含義是如果條件的計(jì)算結(jié)果為真,則結(jié)果為表達(dá)式1的計(jì)算結(jié)果,否則為表達(dá)式2的計(jì)算結(jié)果。instanceof 用來
41、決定第一個(gè)運(yùn)算對象是否為第二個(gè)運(yùn)算對象的一個(gè)實(shí)例。26 八月 202255 2.3.7 運(yùn)算符的優(yōu)先級 運(yùn)算符的優(yōu)先級決定了表達(dá)式中執(zhí)行不同運(yùn)算的先后順序 ,在運(yùn)算符優(yōu)先級相同時(shí),運(yùn)算的進(jìn)行次序取決于運(yùn)算符的結(jié)合性 。 運(yùn)算符的結(jié)合性分為左結(jié)合和右結(jié)合,左結(jié)合就是按照從左向右的次序計(jì)算表達(dá)式,而右結(jié)合就是按照從右到左的次序計(jì)算表達(dá)式。 26 八月 202256 2.4 數(shù)組 Java語言中,數(shù)組是一種最簡單的復(fù)合數(shù)據(jù)類型。數(shù)組的主要特點(diǎn)如下:數(shù)組是相同數(shù)據(jù)類型的元素的集合;數(shù)組中的各元素是有先后順序的,連續(xù)存放在內(nèi)存之中;每個(gè)數(shù)組中的元素用整個(gè)數(shù)組的名字和它在數(shù)組中的位置(稱為下標(biāo))表達(dá)。26
42、 八月 202257 2.4.1數(shù)組聲明、創(chuàng)建、初始化聲明數(shù)組 聲明數(shù)組是定義一個(gè)數(shù)組的名稱、維數(shù)和數(shù)組元素的類型。有兩種定義格式 :格式1:數(shù)組元素類型 數(shù)組名 ;格式2:數(shù)組元素類型 數(shù)組名;其中數(shù)組元素的類型可以是基本類型,也可以是類或接口。創(chuàng)建數(shù)組 數(shù)組聲明只是定義了數(shù)組名和類型,并未指定元素的個(gè)數(shù)。與變量一樣,數(shù)組的每個(gè)元素需要占用存儲空間,因此必須通過某種方式規(guī)定數(shù)組的大小,進(jìn)而確定數(shù)組需要的空間。給已聲明的數(shù)組分配空間可采用如下格式: 數(shù)組名= new 數(shù)組元素類型 數(shù)組元素個(gè)數(shù) 26 八月 202258也可以在聲明數(shù)組的同時(shí)給數(shù)組規(guī)定空間 ,一旦數(shù)組創(chuàng)建以后,數(shù)組就有了固定長度
43、的結(jié)構(gòu),數(shù)組中各元素通過下標(biāo)來區(qū)分,下標(biāo)從0開始,下標(biāo)最大值為數(shù)組元素的個(gè)數(shù)減1。當(dāng)數(shù)組的元素類型為基本類型時(shí),在創(chuàng)建存儲空間時(shí)將按照默認(rèn)規(guī)定給各元素賦初值。數(shù)組的初始化 給數(shù)組元素分配空間和賦初值可以采取以下方式:聲明數(shù)組時(shí)給數(shù)組一個(gè)初值表,格式如下: 類型 數(shù)組名 = 初值表; 所有的數(shù)組都有一個(gè)屬性length,它代表了數(shù)組元素的個(gè)數(shù)。使用數(shù)組時(shí),要注意下標(biāo)不要超出范圍。如果下標(biāo)超出范圍,則運(yùn)行時(shí)會產(chǎn)生“數(shù)組訪問越界異常”。26 八月 202259 2.4.2 數(shù)組使用 在方法調(diào)用中,數(shù)組也可以作為方法參數(shù)來傳遞。但要注意數(shù)組是屬于引用類型的參數(shù)傳遞,也就是在方法中對虛參數(shù)組的操作會影響
44、實(shí)參數(shù)組。 在Java語言應(yīng)用程序的main方法中有一個(gè)字符串?dāng)?shù)組參數(shù),該數(shù)組中存放所有的命令行參數(shù),命令行參數(shù)是給Java語言應(yīng)用程序提供數(shù)據(jù)的手段之一,它跟在命令行運(yùn)行的主類名之后,各參數(shù)之間用空格分隔。使用命令行參數(shù)有利于提高應(yīng)用程序的通用性。 如果命令行參數(shù)中有引號,則兩個(gè)引號之間的字符系列為一個(gè)參數(shù),空格作為參數(shù)的分隔符。如果引號不匹配,則從最后一個(gè)引號到行尾的所有字符將作為一個(gè)參數(shù)。26 八月 202260 2.4.2 多維數(shù)組 Java語言中,多維數(shù)組被看作數(shù)組的數(shù)組,多維數(shù)組的定義是通過對一維數(shù)組的嵌套來實(shí)現(xiàn)的。即用數(shù)組的數(shù)組來定義多維數(shù)組。多維數(shù)組中最常用的是二維數(shù)組,下面主
45、要以二維數(shù)組為例介紹多維數(shù)組的使用。聲明數(shù)組 二維數(shù)組的聲明與一維數(shù)組類似,如下所示:格式1:數(shù)組元素類型 數(shù)組名格式2:數(shù)組元素類型 數(shù)組名;26 八月 202261二維數(shù)組的創(chuàng)建和初始化 為二維數(shù)組創(chuàng)建存儲空間有兩種方式:直接為每個(gè)一維數(shù)組分配空間;從最高維開始,按照由高到低的順序?yàn)槊恳痪S數(shù)據(jù)分配空間 Java語言中,由于把二維數(shù)組看作是數(shù)組的數(shù)組,不要求二維數(shù)組中每一維數(shù)組的大小相同。要獲取數(shù)組的行數(shù),可以通過如下方式獲得:數(shù)組名.length要獲取數(shù)組的列數(shù)則要先確定行,再通過如下方式獲取列數(shù): 數(shù)組名行標(biāo).length 在二維數(shù)組創(chuàng)建空間時(shí),如果元素是基本類型,系統(tǒng)將按照默認(rèn)規(guī)則賦初
46、值;如果元素類型為其他引用類型,則其所有元素為未賦初值狀態(tài)(null)。但可以在數(shù)組定義時(shí)同時(shí)進(jìn)行初始化。26 八月 202262 2.5 流程控制語句 流程控制語句是用來控制程序中各語句執(zhí)行順序的語句,使程序設(shè)計(jì)中非常關(guān)鍵和基本的部分。流程控制語句可以把單個(gè)的語句組合成有意義的、能完成一定功能的小模塊。最主要的流程控制方式是結(jié)構(gòu)化程序設(shè)計(jì)中規(guī)定的三種基本流程結(jié)構(gòu)。 2.5.1結(jié)構(gòu)化程序設(shè)計(jì)的三種基本流程 結(jié)構(gòu)化程序設(shè)計(jì)原則是公認(rèn)的面向過程編程應(yīng)遵循的原則,它使得程序段的邏輯結(jié)構(gòu)清晰、層次分明,有效地改善了局部程序段的可讀性和可靠性,保證了程序質(zhì)量,提高了程序開發(fā)的效率。26 八月 20226
47、3 結(jié)構(gòu)化程序設(shè)計(jì)的最基本原則是:任何程序都是可以由三種基本流程結(jié)構(gòu)構(gòu)成,即順序結(jié)構(gòu)、分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。26 八月 202264三種流程結(jié)構(gòu)的主要特點(diǎn)是:均為單入單出結(jié)構(gòu),每種結(jié)構(gòu)僅有一個(gè)入口點(diǎn),結(jié)構(gòu)執(zhí)行完畢后,僅有一個(gè)出口點(diǎn)。順序結(jié)構(gòu)和選擇結(jié)構(gòu)為開放式結(jié)構(gòu),執(zhí)行完后立即退出;而循環(huán)結(jié)構(gòu)為封閉式結(jié)構(gòu),只要滿足條件則反復(fù)執(zhí)行結(jié)構(gòu)內(nèi)的語句。三種基本結(jié)構(gòu)可以相互嵌套。26 八月 202265 2.5.2 順序結(jié)構(gòu) 順序結(jié)構(gòu)是三種結(jié)構(gòu)中最簡單的一種,即語句按照書寫的順序依次執(zhí)行。從宏觀上來看,整個(gè)程序就是一個(gè)順序結(jié)構(gòu)。 2.5.3 選擇結(jié)構(gòu) Java中的分支結(jié)構(gòu)可以由兩種選擇語句來實(shí)現(xiàn),一個(gè)是實(shí)現(xiàn)雙
48、選擇的if語句,另一個(gè)是實(shí)現(xiàn)多分支的switch開關(guān)語句。26 八月 202266if語句if語句的一般形式是: if(條件表達(dá)式) 語句塊; /if分支 else 語句塊; /else分支塊 其中條件表達(dá)式用來選擇判斷程序的流程走向。在程序的實(shí)際執(zhí)行過程中,如果條件表達(dá)式的取值為真,則執(zhí)行if分支的語句塊,否則執(zhí)行else分支的語句塊。 在編寫程序時(shí),也可以不書寫else分支,此時(shí)若條件表達(dá)式的取值為假,則繞過if分支直接執(zhí)行if語句后的其他語句。有時(shí)也會用到if-else復(fù)合結(jié)構(gòu)。但要注意else字句不能單獨(dú)作為語句使用,它必須和if配對使用。 26 八月 202267switch語句sw
49、itch語句是多分支的開關(guān)語句,它的一般格式如下:switch(表達(dá)式) case 判斷值1:語句塊1;/分支1case 判斷值2:語句塊2;/分支2case 判斷值n:語句塊n;/分支ndefault:語句塊n+1 /分支n+1 switch語句執(zhí)行時(shí),首先計(jì)算表達(dá)式的值,這個(gè)值必須是整型或字符型,同時(shí)應(yīng)與各個(gè)case分支的判斷值的類型相一致。計(jì)算出表達(dá)式的值之后,將它先與第一個(gè)case分支的判斷值相比較。若相同,則程序轉(zhuǎn)入第一個(gè)case分26 八月 202268支的語句塊;否則,再將表達(dá)式的值與第二個(gè)分支相比較依此類推。如果表達(dá)式的值與任何一個(gè)case分支都不相同,則轉(zhuǎn)而執(zhí)行最后的defa
50、ult分支;在default分支不存在的情況下,則跳出整個(gè)switch語句。各個(gè)case和default出現(xiàn)的次序不影響執(zhí)行的結(jié)果。 需要注意各個(gè)case后面的常量不能有相同的值。還有各個(gè)語句塊可以有多條語句,不必使用大括號。switch語句也允許嵌套。還要注意的是,switch語句的每一個(gè)case判斷,都只負(fù)責(zé)指明流程分支的入口點(diǎn),而不負(fù)責(zé)指定分支的出口點(diǎn),分支的出口點(diǎn)需要編程時(shí)用相應(yīng)的跳轉(zhuǎn)語句來標(biāo)明。26 八月 202269 2.5.4 循環(huán)結(jié)構(gòu) 循環(huán)結(jié)構(gòu)是利用循環(huán)語句來實(shí)現(xiàn)的。循環(huán)語句是在一定條件下反復(fù)執(zhí)行一段代碼,被反復(fù)執(zhí)行的程序段稱為循環(huán)體。Java語言中提供的循環(huán)語句有三種:whi
51、le語句、do-while語句、for語句。 26 八月 202270while語句while語句的一般形式是: while (條件表達(dá)式) 循環(huán)體 while語句的執(zhí)行時(shí),首先檢查表達(dá)式的值是否為真,若為真,則執(zhí)行循環(huán)體,然后繼續(xù)判斷是否繼續(xù)循環(huán),直到表達(dá)式的值為假,直到表達(dá)式的值為假,執(zhí)行后續(xù)語句。循環(huán)體通常是一個(gè)組合語句,也可以是單個(gè)語句。 while循環(huán)的特點(diǎn)是“先判斷,后執(zhí)行”。如果條件已開始就不滿足,則循環(huán)執(zhí)行為0次。另外,在循環(huán)體中通常通過執(zhí)行某個(gè)操作來改變循環(huán)條件,如果循環(huán)條件不改變,則循環(huán)會陷入死循環(huán)中。在程序設(shè)計(jì)中要避免死循環(huán)。26 八月 202271do-while語句
52、如果需要在任何情況下都先執(zhí)行一遍循環(huán)體,則可以采用do-while循環(huán),它的格式如下: do 循環(huán)體while(條件表達(dá)式) do-while循環(huán)的特點(diǎn)是:“先執(zhí)行,后判斷”,在執(zhí)行時(shí),先執(zhí)行循環(huán)體的語句,在檢查表達(dá)式,若表達(dá)式的值為真,則繼續(xù)執(zhí)行循環(huán)體,否則,結(jié)束循環(huán),執(zhí)行后續(xù)語句。與while循環(huán)相比,循環(huán)體至少要執(zhí)行一次。26 八月 202272for語句 for語句一般用于事先能夠確定循環(huán)次數(shù)的場合,其格式為: for(控制變量設(shè)定初值;循環(huán)條件;迭代部分) 循環(huán)體 for語句執(zhí)行時(shí),首先執(zhí)行初始化操作,然后判斷終止條件是否滿足,如果滿足,則執(zhí)行循環(huán)體中的語句,最后通過執(zhí)行迭代部分給控
53、制變量增值。完成一次循環(huán)后,重新判斷終止條件。 使用for循環(huán)要注意一下幾點(diǎn):初始化、終止條件以及迭代部分都可以為空(但分號不能少),三者均為空時(shí),相當(dāng)于一個(gè)無限循環(huán)。在初始化部分和迭代部分可以使用逗號表達(dá)式,來進(jìn)行多個(gè)操作。26 八月 2022732.5.5 跳轉(zhuǎn)語句循環(huán)嵌套 三種循環(huán)語句可以自身嵌套,也可以相互嵌套。嵌套將循環(huán)分為內(nèi)外兩層,外層循環(huán)每循環(huán)一次,內(nèi)層循環(huán)要執(zhí)行一圈。注意編寫嵌套循環(huán)時(shí),不能出現(xiàn)內(nèi)外循環(huán)的結(jié)構(gòu)交叉現(xiàn)象。break語句 在switch語句中,break語句已經(jīng)得到應(yīng)用。在各類循環(huán)語句中,break語句也提供了一種方便的跳出循環(huán)的方法。它有兩種使用形式: 26 八月
54、 202274 break /不帶標(biāo)號,從break直接所在處的循環(huán)體中跳轉(zhuǎn)出來 break 標(biāo)號名 /帶標(biāo)號,跳出標(biāo)號所指的代碼塊,執(zhí)行塊后的下一條語句給代碼塊加標(biāo)號的格式如下: BlockLabel:codeBlockcontinue語句 continue語句用來結(jié)束本次循環(huán),跳過循環(huán)體中下面尚未執(zhí)行的語句,接著進(jìn)行終止條件的判斷,以決定是否繼續(xù)循環(huán)。對于for語句,在進(jìn)行終止條件的判斷前,還要先執(zhí)行迭代語句。它有兩種形式:continue /不帶標(biāo)號,終止當(dāng)前一輪的循環(huán),繼續(xù)下一輪循環(huán)continue 標(biāo)號 /帶標(biāo)號,跳轉(zhuǎn)到標(biāo)號所指示的外層循環(huán)中26 八月 2022752.6 本章小結(jié)
55、本章是Java語言程序設(shè)計(jì)的基礎(chǔ),該章主要是對程序的組成元素和邏輯進(jìn)行介紹。 Java語言中的數(shù)據(jù)類型有簡單數(shù)據(jù)類型和復(fù)合數(shù)據(jù)類型兩種,其中簡單數(shù)據(jù)類型包括整數(shù)類型、浮點(diǎn)數(shù)類型、字符類型和布爾類型;復(fù)合數(shù)據(jù)類型包括類、接口和數(shù)組。 表達(dá)式是由運(yùn)算符和操作數(shù)組成的符號序列,對一個(gè)表達(dá)式進(jìn)行運(yùn)算時(shí),要按照運(yùn)算符的優(yōu)先順序從高到低進(jìn)行,同級的運(yùn)算符則按照結(jié)合性決定運(yùn)算次序。26 八月 202276 數(shù)組是具有相同類型元素的有序集合,數(shù)組的創(chuàng)建分為定義、分配內(nèi)存以及初始化等階段。通過下標(biāo)變量訪問數(shù)組中的元素。經(jīng)常用循環(huán)語句來控制對數(shù)組元素的訪問,但要注意訪問不要越界 。 條件語句、循環(huán)語句和跳轉(zhuǎn)語句是
56、Java語言中常用的控制語句。對這些語句的正確理解和運(yùn)用非常重要。程序設(shè)計(jì)的關(guān)鍵是要將算法思路轉(zhuǎn)化為可實(shí)現(xiàn)的語句。第三章類和對象 26 八月 202278 學(xué)習(xí)目的: 了解面向?qū)ο蠡靖拍?掌握類的創(chuàng)建和使用 掌握對象的創(chuàng)建與使用了解參數(shù)的傳遞 了解匿名對象 學(xué)習(xí)重點(diǎn):掌握類的創(chuàng)建和使用 掌握對象的創(chuàng)建與使用26 八月 202279第三章 類和對象 本章提要: 面向?qū)ο蠡靖拍铑惖膭?chuàng)建和使用對象的創(chuàng)建與使用參數(shù)的傳遞匿名對象 26 八月 2022803.1 面向?qū)ο蟮某绦蛟O(shè)計(jì)方法概述 3.1.1 抽象 抽象是人們解決問題的主要手段,也是面向?qū)ο蟪绦蛟O(shè)計(jì)解決實(shí)際問題法寶之一。所謂抽象就是指從眾多
57、的事物面向?qū)ο蟪绦蛟O(shè)計(jì)標(biāo)志著程序設(shè)計(jì)思想發(fā)展到一個(gè)新的高度,它用一種更符合人們認(rèn)識客觀世界的思維方式進(jìn)行程序設(shè)計(jì):相對于面向過程的程序設(shè)計(jì)以研究問題的解決過程為主體,面向?qū)ο缶幊淌且詫ο鬄橹黧w,使編程富于創(chuàng)造性,提高了程序的可重用性,簡化了編程過程,同時(shí)也使程序更易于維護(hù)。26 八月 202281中舍棄個(gè)別的、非本質(zhì)的屬性,抽出共同的、本質(zhì)的屬性的過程。是面向?qū)ο蟪绦蛟O(shè)計(jì)的核心概念。用面向?qū)ο缶幊探鉀Q現(xiàn)實(shí)世界的問題時(shí),首先是利用抽象技術(shù)將現(xiàn)實(shí)世界中的各種實(shí)體,歸納總結(jié)出共性的東西形成一類實(shí)體的基本特征。這些特征包括屬性和行為,這些本質(zhì)屬性和方法的有機(jī)組合,就是面向?qū)ο蠓椒ㄖ械念悺?.1.2 封
58、裝 封裝性是面向?qū)ο缶幊痰幕咎匦灾?,它通過封裝隱蔽了對象的內(nèi)部實(shí)現(xiàn)細(xì)節(jié)。對象的封裝有兩個(gè)方面:26 八月 202282一方面表示對象的屬性和方法是不可分割的整體。對象的屬性和方法封裝為一體具有重要的意義,因?yàn)樗从沉藢ο笸瑫r(shí)具有了客觀事物的靜態(tài)特征和動(dòng)態(tài)行為相統(tǒng)一的客觀規(guī)律,使軟件對客觀事物的描述更接近人類表述;而過去的面向過程的編程語言都是將功能和數(shù)據(jù)相分離,使軟件對客觀事物的描述存在偏差,很難自然地用語言表達(dá)客觀事物的對應(yīng)關(guān)系。另一方面,封裝還表示對象內(nèi)部細(xì)節(jié)的隱蔽性。對內(nèi)部細(xì)節(jié)的隱蔽性反映了事物客觀的相對獨(dú)立性,這樣既可以防止外界的干擾,又可以降低復(fù)雜性。在java語言中,對象、類和
59、包逐層封裝,為管理大量的對象和類提供了方便,也增強(qiáng)了語言的安全性。隱藏了內(nèi)部細(xì)節(jié)也使得java的使用者和設(shè)計(jì)者分離,使用者只需用接口去滿足軟件重用的策略,可以降低軟件開發(fā)成本,縮短開發(fā)周期,是軟件的開發(fā)和維護(hù)得到根本性的改善。26 八月 202283訪問對象,而不必知道對象的內(nèi)部細(xì)節(jié)。從軟件工程的角度講,封裝也符合模塊化設(shè)計(jì)原則,滿足軟件重用的策略,可以降低軟件開發(fā)成本,縮短開發(fā)周期,是軟件的開發(fā)和維護(hù)得到根本性的改善。 3.1.3 繼承面向?qū)ο蟪绦蛟O(shè)計(jì)的另一重要特點(diǎn)是類的繼承性。繼承是讓一個(gè)類成為另一個(gè)類的子類,子類繼承父類的所有特性,并可以擴(kuò)充自己的特性。這種關(guān)系為共享數(shù)據(jù)和操作提供了一種
60、良好的機(jī)制。繼承提高了軟件的重用性、可用性和界面的一致性。根據(jù)繼承的特性,可以將繼承分為如下兩種主要形式:26 八月 202284(1)直接繼承和間接繼承。如果類c的定義直接繼承于類b,則稱c直接繼承于b,且b是c的直接父類;如果又有b類又直接繼承于a類,則可稱c類間接繼承于a類。間接繼承體現(xiàn)了繼承關(guān)系的可傳遞性。(2)單繼承和多繼承。如果一個(gè)類只有一個(gè)直接父類,則稱該關(guān)系為單繼承;如果一個(gè)類有多于一個(gè)以上的父類,則稱該繼承關(guān)系為多繼承。Java語言只支持單繼承,而不支持多繼承。 3.1.4 多態(tài)多態(tài)性也是面向?qū)ο缶幊痰囊粋€(gè)特性,它反映了現(xiàn)實(shí)世界中謀類事物中的每個(gè)實(shí)體,都具有一些不同于其它實(shí)體
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《社區(qū)足球賽方案》課件
- 《汽車客運(yùn)站調(diào)研》課件
- 2024年黑龍江林業(yè)職業(yè)技術(shù)學(xué)院單招職業(yè)技能測試題庫完整答案
- 單位管理制度集合大全【人事管理篇】
- 《綜合分析觀點(diǎn)類》課件
- 單位管理制度匯編大全【人員管理】
- 2024的前臺工作計(jì)劃(35篇)
- 單位管理制度范文大合集【職工管理篇】
- 單位管理制度范例匯編【人員管理篇】十篇
- 《禽流感的預(yù)防措施》課件
- (八省聯(lián)考)河南省2025年高考綜合改革適應(yīng)性演練 生物試卷(含答案)
- 人工智能銷售工作總結(jié)
- 2025年中小學(xué)春節(jié)安全教育主題班會課件
- 工商注冊租房合同范例
- 2023-2024學(xué)年廣東省深圳市羅湖區(qū)八年級上學(xué)期期末生物試題
- 【9物(北師)期末】阜陽市臨泉縣2023-2024學(xué)年九年級上學(xué)期期末考試物理試題
- 2025年醫(yī)院保衛(wèi)科工作總結(jié)及2025年工作計(jì)劃
- 班會課件高中
- 醫(yī)院消防安全知識培訓(xùn)課件
- 國家衛(wèi)生部《綜合醫(yī)院分級管理標(biāo)準(zhǔn)》
- 《微觀經(jīng)濟(jì)學(xué)》課程思政教學(xué)案例(一等獎(jiǎng))
評論
0/150
提交評論