Java程序設(shè)計與應(yīng)用-全套電子課件完整版ppt整本書電子講義最全教學(xué)教程整套課件_第1頁
Java程序設(shè)計與應(yīng)用-全套電子課件完整版ppt整本書電子講義最全教學(xué)教程整套課件_第2頁
Java程序設(shè)計與應(yīng)用-全套電子課件完整版ppt整本書電子講義最全教學(xué)教程整套課件_第4頁
Java程序設(shè)計與應(yīng)用-全套電子課件完整版ppt整本書電子講義最全教學(xué)教程整套課件_第5頁
已閱讀5頁,還剩492頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第1章

Java語言概述

06二月20232學(xué)習(xí)目的:了解程序設(shè)計語言的發(fā)展歷史了解Java語言的特色和應(yīng)用背景了解Java虛擬機、Java的運行環(huán)境和Java編程語言開發(fā)環(huán)境初步掌握簡單Java程序的創(chuàng)建、編譯和運行學(xué)習(xí)重點面向?qū)ο蟮某绦蛟O(shè)計語言

Java虛擬機Java的運行環(huán)境Java程序的創(chuàng)建、編譯和運行06二月20233第1章

Java語言概述

本章提要:

1.程序設(shè)計語言概述2.Java語言簡介3.

Java語言概述

4.簡單Java程序的創(chuàng)建、編譯及運行步驟06二月202341.1程序設(shè)計語言概述

1.1.1計算機程序設(shè)計方法和語言隨著計算機硬件與通訊技術(shù)的發(fā)展,計算機應(yīng)用領(lǐng)域越來越廣泛,應(yīng)用規(guī)模也越來越大,程序設(shè)計不再是一、兩個程序員可完成的任務(wù),在這種情況下編寫程序不再片面追求高效率,而是綜合考慮程序的可靠性、可擴展性、可重用性和可理解性等因素。

程序設(shè)計方法是獨立于具體程序設(shè)計語言的一門技術(shù)。由于程序設(shè)計通常離不開程序設(shè)計語言作為工具,所以容易混淆程序設(shè)計方法與程序設(shè)計語言的概念。程序設(shè)計語言的設(shè)計目的主要是為了支持某種程序設(shè)計方法。06二月20235早期的程序設(shè)計早期的高級程序設(shè)計語言有FORTROM、COBOL、BASIC等。這一時期由于追求程序的高效率,程序員過份依賴技巧與天份,不太注重程序的結(jié)構(gòu),。一個典型問題是程序中的控制隨意跳轉(zhuǎn),即不加限制地使用goto語句,這樣的程序?qū)﹂喿x者來說是難以理解的,程序員也難以修改程序。結(jié)構(gòu)化的程序設(shè)計隨著程序規(guī)模與復(fù)雜性的不斷增長,20世紀60年代誕生了結(jié)構(gòu)化程序設(shè)計方法。結(jié)構(gòu)化程序設(shè)計方法的主要技術(shù)是自頂向下、逐步求精,采用單入口/單輸出的控制結(jié)構(gòu)。這一程序設(shè)計方法的代表語言是Pascal、C、Ado等。06二月20236

自頂向下是一種分解問題的技術(shù),與控制結(jié)構(gòu)有關(guān)。逐步求精指對結(jié)構(gòu)化程序進行分解,最終使其成為三種基本控制結(jié)構(gòu)的組合。結(jié)構(gòu)化程序設(shè)計的結(jié)果是一個程序最終由若干過程組成,每一個過程完成一個明確的功能。面向?qū)ο蟪绦蛟O(shè)計

雖然結(jié)構(gòu)化程序設(shè)計提高了軟件生產(chǎn)率和軟件質(zhì)量,但隨著程序規(guī)模與復(fù)雜性的增長,程序中的數(shù)據(jù)結(jié)構(gòu)變得與這些數(shù)據(jù)上的操作同樣重要。在大型結(jié)構(gòu)化程序中,一個數(shù)據(jù)結(jié)構(gòu)可能由許多個過程來處理,修改數(shù)據(jù)結(jié)構(gòu)將影響到所有相關(guān)的過程。在由幾百個過程組成的成千上萬行的結(jié)構(gòu)化程序中,這種情況變得相當麻煩并且容易產(chǎn)生錯誤。

06二月20237

20世紀80年代興起的面向?qū)ο蟪绦蛟O(shè)計方法在結(jié)構(gòu)化程序設(shè)計的基礎(chǔ)上提出了一種新的設(shè)計思路,最重要的改變是程序圍繞被操作的數(shù)據(jù)來設(shè)計,而不是圍繞操作本身。面向?qū)ο蟪绦蛟O(shè)計以類作為構(gòu)造程序的基本單位,具有封裝、數(shù)據(jù)抽象、繼承、多態(tài)化等特點。較有影響的面向?qū)ο蟪绦蛟O(shè)計語言有Simula、C++、Java等。Java語言是在C++語言基礎(chǔ)上發(fā)展起來的一種適合分布式計算的新型面向?qū)ο蟪绦蛟O(shè)計語言,也是目前推廣最快的程序設(shè)計語言。Java語言將面向?qū)ο?、平臺無關(guān)性、穩(wěn)定性與安全性、多線程等特征集于一身,為用戶提供了一個良好的程序設(shè)計環(huán)境,特別適合因特網(wǎng)的應(yīng)用開發(fā)。與當前迅速發(fā)展的因特網(wǎng)應(yīng)用緊密結(jié)合是Java語言成功的關(guān)鍵所在。

06二月202381.1.2

計算機程序設(shè)計方法和語言面向?qū)ο笈c面向過程的區(qū)別

早期的編程語言如Fortran語言和C語言基本上都是面向過程的語言,主要是采用數(shù)學(xué)語言方式編程的語言,其編程的主要思路專注于算法的實現(xiàn)。

傳統(tǒng)的面向過程的編程在描述問題時,由兩部分組成:數(shù)據(jù):描述實體狀態(tài)的數(shù)據(jù)結(jié)構(gòu);過程:操作這些狀態(tài)數(shù)據(jù)的程序和步驟。

面向過程編程的一個顯著特點是數(shù)據(jù)與程序的分開。數(shù)據(jù)是靜止的東西,不會自行變化,必須通過過程操作來改變數(shù)據(jù),因此,函數(shù)調(diào)用在面向過程編程中被大量使用。06二月20239

針對程序結(jié)構(gòu)不清晰而無法維護改進的局面。面向?qū)ο缶幊烫岢隽艘环N全新的思路,讓計算機語言結(jié)構(gòu)像人類思維方式一樣簡單和清晰。面向?qū)ο蟮能浖_發(fā)中將世界上的事物均看成對象,任一對象有兩個特征:行為與狀態(tài)。每個對象可以通過自身的行為來改變自己的狀態(tài)。在面向?qū)ο蟮氖澜缰?,通過對象間的協(xié)作與交互來運作。由于將對象的操作封閉在對象內(nèi),外部要與對象進行交互只能通過給對象發(fā)送“消息”,這個消息實際上就是調(diào)用對象的某個行為方法,消息中還包括方法的參數(shù)。06二月202310面向?qū)ο蟪绦蛟O(shè)計的特性封裝性

面向?qū)ο蟮牡谝粋€原則是把數(shù)據(jù)和該數(shù)據(jù)的操作都封裝在一個類中,比如說筆記本電腦就是一個類。筆記本電腦這個類有許多屬性,有些是靜態(tài)的(數(shù)據(jù)),比如:顯示屏的亮度,本身的重量;有些是動態(tài)的(對數(shù)據(jù)的操作),比如:可以按下組合鍵“ctrl+F4”或“ctrl+F5”來調(diào)整顯示器的亮度,可以卸掉它的外掛光驅(qū)來減輕它的重量。

對象是類的一個實例化結(jié)果,對象具有類所描述的所有的屬性以及方法。比如不同品牌、不同樣式的筆記本電腦之間的共同屬性就是它們所屬的類——筆記本電腦類的屬性。只不過類是抽象的東西,而對象是具體的,對象具有它隸屬類的所有屬性,包括靜態(tài)的和動態(tài)的。06二月202311

每個對象都有自己的存儲空間,可容納其他對象,或者說通過封裝現(xiàn)有的對象,可以產(chǎn)生新型對象。因此,盡管對象的概念非常簡單,但是經(jīng)過封裝以后卻可以在程序中達到任意高的復(fù)雜程度。

每個對象都屬于某個類。根據(jù)語法,每個對象都是某個“類”的實例。一個類的最重要的特征就是“能將什么消息發(fā)給它?”,也就是類本身有哪些操作。面向?qū)ο蟪绦蛟O(shè)計就是設(shè)計好相關(guān)的類,類中有靜態(tài)的域,和動態(tài)的方法。繼承性繼承是在類、子類、以及對象之間自動地共享屬性和方法的機制。類的上層可以有父類、下層可以有子類,形成一種層次結(jié)構(gòu)。一個類將直接繼承其父類的屬性和行為06二月202312,而且繼承還具有傳遞性,因此,它還將間接繼承所有祖先類的屬性和行為。

繼承最主要的優(yōu)點是重復(fù)使用性,通過繼承可以無限繁衍出更多的類,這樣的結(jié)果可讓軟件的開發(fā)加速,同時可達到程序共享的好處。通過繼承可以直接繼承系統(tǒng)提供的或他人寫作的類,并加以改寫,進而得到功能的不斷擴充。

繼承的另一個優(yōu)點是在于接口的一致性。當超類繁衍出許多子類時,它的行為接口通過繼承可以傳給其所有子類。因此可以通過統(tǒng)一的行為接口去訪問不同的子類對象的方法,但不同子類中行為的具體實現(xiàn)可能時不一樣的。06二月202313多態(tài)性多態(tài)是指在表示特定功能時,有多種不同的形態(tài)或?qū)崿F(xiàn)方法。常見的多態(tài)形式有兩種:方法的重載:即在同一個類中某個方法有多種形態(tài),其方法名相同,但參數(shù)不同,所以也稱參數(shù)多態(tài)。方法的覆蓋:在子類中重新定義一個與父類有相同形態(tài)的方法,這樣,在子類中將覆蓋從父類繼承來的那個方法。多態(tài)為描述客觀事物提供了極大的能動性。參數(shù)多態(tài)提供了方法的多種使用形態(tài),方便使用者的調(diào)用;而覆蓋多態(tài)則使得用戶可以用同樣的方式對待不同的對象,不同的對象可以用它們自己的方式響應(yīng)同一消息。用戶可以通過父類去引用子類的對象,執(zhí)行方法時則表現(xiàn)出每個子類對象各自的行為。

06二月202314抽象性這里的抽象有兩個層次的含義,一是體現(xiàn)在類的層次設(shè)計中,高層類是底層類的抽象表述。類層次設(shè)計體現(xiàn)著不斷抽象的過程。第二體現(xiàn)在類與對象之間的關(guān)系上,類是一個抽象的概念,而對象是具體的。面向?qū)ο缶幊痰暮诵氖窃O(shè)計類,但實際運行操作的是對象。類是對象的模板,對象的創(chuàng)建是以類為基礎(chǔ)。同一類創(chuàng)建的對象具有共同的屬性,但屬性值不同。06二月2023151.2程序設(shè)計語言概述Java語言有下面一些特點:簡單性Java語言是一種面向?qū)ο蟮恼Z言,它通過提供最基本的方法來完成指定的任務(wù),只需理解一些基本的概念,就可以用它編寫出適合于各種情況的應(yīng)用程序。Java略去了運算符重載、多重繼承等模糊的概念,并且通過實現(xiàn)自動垃圾收集大大簡化了程序設(shè)計者的內(nèi)存管理工作。另外,Java也適合于在小型機上運行。

1.2.1Java語言的特色06二月202316面向?qū)ο驤ava語言的設(shè)計集中于對象及其接口,它提供了簡單的類機制以及動態(tài)的接口型。對象中封裝了它的狀態(tài)變量以及相應(yīng)的方法,實現(xiàn)了模塊化和信息隱藏;而類則提供了一類對象的原型,并且通過繼承機制,子類可以使用父類所提供的方法,實現(xiàn)了代碼的復(fù)用。分布性

Java是面向網(wǎng)絡(luò)的語言。通過它提供的類庫可以處理TCP/IP協(xié)議,用戶可以通過URL地址在網(wǎng)絡(luò)上很方便地訪問其它對象。

06二月202317魯棒性Java在編譯和運行程序時,都要對可能出現(xiàn)的問題進行檢查,以消除錯誤的產(chǎn)生。它提供自動垃圾收集來進行內(nèi)存管理,防止程序員在管理內(nèi)存時容易產(chǎn)生的錯誤。通過集成的面向?qū)ο蟮睦馓幚頇C制,在編譯時,Java提示出可能出現(xiàn)但未被處理的例外,幫助程序員正確地進行選擇以防止系統(tǒng)的崩潰。另外,Java在編譯時還可捕獲類型聲明中的許多常見錯誤,防止動態(tài)運行時不匹配問題的出現(xiàn)。06二月202318安全性

用于網(wǎng)絡(luò)、分布環(huán)境下的Java必須要防止病毒的入侵。Java不支持指針,一切對內(nèi)存的訪問都必須通過對象的實例變量來實現(xiàn),這樣就防止程序員使用“特洛伊”木馬等欺騙手段訪問對象的私有成員,同時也避免了指針操作中容易產(chǎn)生的錯誤。體系結(jié)構(gòu)中立

Java解釋器生成與體系結(jié)構(gòu)無關(guān)的字節(jié)碼指令,只要安裝了Java運行時系統(tǒng),Java程序就可在任意的處理器上運行。這些字節(jié)碼指令對應(yīng)于Java虛擬機中的表示,Java解釋器得到字節(jié)碼后,對它進行轉(zhuǎn)換,使之能夠在不同的平臺運行。

06二月202319可移植性

與平臺無關(guān)的特性使Java程序可以方便地被移植到網(wǎng)絡(luò)上的不同機器。同時,Java的類庫中也實現(xiàn)了與不同平臺的接口,使這些類庫可以移植。另外,Java編譯器是由Java語言實現(xiàn)的,Java運行時系統(tǒng)由標準C實現(xiàn),這使得Java系統(tǒng)本身也具有可移植性。解釋執(zhí)行Java解釋器直接對Java字節(jié)碼進行解釋執(zhí)行。字節(jié)碼本身攜帶了許多編譯時信息,使得連接過程更加簡單。高性能和其它解釋執(zhí)行的語言如BASIC、TCL不同,Java字節(jié)碼的設(shè)計使之能很容易地直接轉(zhuǎn)換成對應(yīng)于特定CPU的機器碼,從而得到較高的性能。06二月202320多線程

多線程機制使應(yīng)用程序能夠并行執(zhí)行,而且同步機制保證了對共享數(shù)據(jù)的正確操作。通過使用多線程,程序設(shè)計者可以分別用不同的線程完成特定的行為,而不需要采用全局的事件循環(huán)機制,這樣就很容易地實現(xiàn)網(wǎng)絡(luò)上的實時交互行為。動態(tài)性

Java的設(shè)計使它適合于一個不斷發(fā)展的環(huán)境。在類庫中可以自由地加入新的方法和實例變量而不會影響用戶程序的執(zhí)行。并且Java通過接口來支持多重繼承,使之比嚴格的類繼承具有更靈活的方式和擴展性。06二月2023211.2.2Java的應(yīng)用背景Java語言對軟件開發(fā)技術(shù)的影響Java語言將對未來軟件的開發(fā)產(chǎn)生影響,可從如下幾個方面考慮:軟件的需求分析:可將用戶的需求進行動態(tài)的、可視化描述,以提供設(shè)計者更加直觀的要求。而用戶的需求是各色各樣的,不受地區(qū)、行業(yè)、部門、愛好的影響,都可以用Java語言描述清楚。軟件的開發(fā)方法:由于Java語言的面向目標的特性,所以完全可以用面向?qū)ο蟮募夹g(shù)與方法來開發(fā),這是符合最新的軟件開發(fā)規(guī)范要求的。

06二月202322Java語言的動畫效果遠比GUI技術(shù)更加逼真,尤其是利用Internet提供的巨大動畫資源空間,可以共享全世界的動態(tài)畫面的資源。軟件最終產(chǎn)品:用Java語言開發(fā)的軟件可以具有可視化、可聽化、可操作化的交互、動畫與動作,要它停就停,要它繼續(xù)就繼續(xù),而這是在電影與電視播放過程中難以做到的。其它:使用Java語言對開發(fā)效益、開發(fā)價值都有比較明顯的影響。

06二月202323Java語言的應(yīng)用前景

Java語言有著廣泛的應(yīng)用前景,大體上可以從以下幾個方面來考慮其應(yīng)用:所有面向?qū)ο蟮膽?yīng)用開發(fā),包括面向?qū)ο蟮氖录枋觥⑻幚?、綜合等。計算過程的可視化、可操作化的軟件的開發(fā)。動態(tài)畫面的設(shè)計,包括圖形圖像的調(diào)用。交互操作的設(shè)計(選擇交互、定向交互、控制流程等)。Internet的系統(tǒng)管理功能模塊的設(shè)計,包括Web頁面的動態(tài)設(shè)計、管理和交互操作設(shè)計等。Intranet(企業(yè)內(nèi)部網(wǎng))上的軟件開發(fā)(直接面向企業(yè)內(nèi)部用戶的軟件)。與各類數(shù)據(jù)庫連接查詢的SQL語句實現(xiàn)。其它應(yīng)用類型的程序。06二月2023241.3程序設(shè)計語言簡介

用Java可寫兩種類型的程序:小程序(又叫JavaApplet)和應(yīng)用程序(Javaapplicatian)。

小程序是嵌入在HTML文檔種的Java程序;而Java應(yīng)用程序是從命令行運行的程序。對Java而言,Java小程序的大小和復(fù)雜性都沒有限制。由于WWW使小程序的發(fā)布十分便利,因此小程序更適合作為Internet上的應(yīng)用程序。

應(yīng)用程序(JavaApplication)是可以獨立運行的Java程序,有Java解釋器控制執(zhí)行。Applet則不能獨立運行,而是被嵌入到Web頁中,有Java兼容瀏覽器控制執(zhí)行。

06二月202325

Java程序在編譯后生成的不是某種CPU的指令碼,而是Java語言特有的字節(jié)代碼。Java字節(jié)代碼運行在Java虛擬機上。

每一個操作系統(tǒng)的Java解釋器是不同的,但實現(xiàn)Java虛擬機時相同的,這就是Java語言與平臺無關(guān)的關(guān)鍵所在。Java虛擬機由五部分組成:一組指令集、一組寄存器、一個堆棧、一個無用內(nèi)存單元收集器、一個方法區(qū)域,這五個部分是Java虛擬機的邏輯抽象成分,不倚賴于任何實現(xiàn)技術(shù)或組織,但是它們的功能必須在真實機器上以某種來實現(xiàn)。Java虛擬機內(nèi)存區(qū)域不倚賴實現(xiàn)內(nèi)存的位置,也不要求連續(xù),但要求邏輯的長度固定。

1.3.1Java的虛擬機06二月202326

Java虛擬機支持240多個字節(jié)代碼,每個字節(jié)代碼執(zhí)行一種基本的CPU運算。Java語言指令集相當于Java語言程序的“匯編語言”,Java語言指令集的一條指令有一個操作碼、領(lǐng)個或多個操作數(shù)。操作數(shù)指定實施的操作,操作數(shù)是操作碼所需要的參數(shù)。Java語言的操作碼均為一個字節(jié)長,操作數(shù)沒有限制。

Java虛擬機的寄存器用于保存機器的運行狀態(tài)。Java虛擬機寄存器有四種:Java語言程序計數(shù)器;指向操作數(shù)棧頂端的指針;指向當前執(zhí)行方法的執(zhí)行環(huán)境的指針;指向當前執(zhí)行方法局部變量的區(qū)第一個變量的指針。Java虛擬機是用堆棧來處理數(shù)據(jù)傳遞的,它不定義或使用寄存器來傳遞或接受參數(shù)。目的是為了保證指令集的簡潔性和實現(xiàn)時的高效性。06二月202327

Java虛擬機的堆棧有三個區(qū)域:局部變量區(qū)、執(zhí)行環(huán)境區(qū)和操作數(shù)區(qū)。Java虛擬機的堆棧是運行時刻動態(tài)分配的對象存儲區(qū)域。Java語言可以進行自動的無須內(nèi)存單元的收集,程序無須顯示釋放占有的內(nèi)存空間,無須內(nèi)存單元自動回收的算法倚賴于虛擬機最終實現(xiàn)的硬件環(huán)境。

Java虛擬機的方法區(qū)是編譯后的代碼區(qū)域,包含方法代碼、符號表等。

06二月2023281.3.2Java的運行環(huán)境的配置Java不僅提供了一個豐富的語言和運行環(huán)境,而且還提供了一個免費的Java開發(fā)工具集(JavaDevelopersKits,簡稱JDK,也稱SDK)。編程人員和最終用戶可以利用這些工具來開發(fā)Java程序或調(diào)用Java內(nèi)容。

SUN的Java不僅提了一個豐富的語言和運行環(huán)境,而且還提了一個免費的Java開發(fā)工具集(SDK)。開發(fā)人員和最終用戶可以利用這個工具來開發(fā)Java程序。SDK簡單易學(xué),可以通過任何文本編輯器編寫Java源文件,然后在DOS狀況下利通過javac命令將Java源程序編譯成字節(jié)碼,通過Java命令來執(zhí)行編譯后的Java文件。

06二月202329SDK的另一個顯著特點是隨著Java(J2EE、J2SE以及J2ME)版本的升級而升級。但它的缺點也是非常明顯的就是從事大規(guī)模企業(yè)級Java應(yīng)用開發(fā)非常困難,不能進行復(fù)雜的Java軟件開發(fā),也不利于團體協(xié)同開發(fā)。建立Java開發(fā)環(huán)境JDK開發(fā)環(huán)境中常用工具介紹在Java環(huán)境中的Java工具主要有:*appletviewer小應(yīng)用程序瀏覽器*java解釋器*javac編譯器*javah頭文件生成器*javadocAPI文檔生成器*javap類文件反匯編器*sdbJava語言調(diào)試器06二月2023301.3.1Java的虛擬機目前可供開發(fā)人員選擇得Java語言開發(fā)工具有很多,例如:Sun公司的SDK(命令行方式的)Java語言編輯器,用Java語言開發(fā)的圖形化界面的JavaWorkShop,Symmatec公司的VisualCafé,微軟公司的VisualJ++,Borland公司的JBuilder等等。開發(fā)人員選擇開發(fā)工具可以根據(jù)以下原則:開發(fā)界面是否友好,編譯效率是否高,是否有可視化的調(diào)試器,能否在瀏覽器中調(diào)試Java語言小程序,能否為使用者完成一些重復(fù)的勞動等。06二月2023311.4簡單Java程序的創(chuàng)建、編譯及運行步驟Java是解釋型的高級編程語言,所以Java程序的開發(fā)通常需要編寫源程序、編譯生成字節(jié)碼和運行幾個過程。編寫源程序編寫源程序是程序開發(fā)的第一步,我們只需要簡單的文字編輯器,如Edit或記事本或集成開發(fā)環(huán)境中的編輯窗口,利用這些文字編輯器將源程序錄入到計算機中,形成一個文件保存起來。注意必須要保證Java程序是無格式的純文本文件。

06二月202332編譯和運行HelloWorld應(yīng)用程序我們利用Java的編譯器系統(tǒng)軟件,一般采用Sun公司提供的javac.exe。

如果編譯成功,則生成以類命名、以class為后綴的字節(jié)碼文件;否則報告錯誤。要運行一個編譯好的Java字節(jié)碼程序,還需要調(diào)用Java的解釋器軟件java.exe。

06二月2023331.5本章小結(jié)本章介紹了Java語言的產(chǎn)生和特點。給出了兩種Java程序,Java應(yīng)用程序和JavaApplet程序的調(diào)試步驟。JavaApplication在命令方式下進行調(diào)試,而JavaApplet在瀏覽器的環(huán)境下運行。Java語言是一門純面向?qū)ο蟮木幊陶Z言。

面向?qū)ο缶幊痰乃悸氛J為程序都是對象的組合,因此要克服面向過程編程的思路,直接按照對象和類的思想去組織程序,面向?qū)ο笏哂械姆庋b性、繼承性、多態(tài)性等特點使其具有強大的生命力。

06二月202334Sun公司為全世界Java開發(fā)人員提供了一套免費的軟件開發(fā)包Java2SDK,也稱為JDK,它不僅是Java的開發(fā)平臺,還是Java的運行平臺。Java源程序存放在.java文件中,可以通過任意一個文本編輯器編輯產(chǎn)生,源程序經(jīng)過“javac”命令編譯過后,就生成了相應(yīng)的.class文件。第2章

Java語言基礎(chǔ)

06二月202336學(xué)習(xí)目的:了解Java程序的構(gòu)成

了解Java的基本數(shù)據(jù)類型

了解Java的運算符與表達式

了解數(shù)組的創(chuàng)建、定義和使用掌握Java流程控制語句

初步掌握java簡單程序的編寫學(xué)習(xí)重點:

Java的基本數(shù)據(jù)類型、運算符與表達式

一維數(shù)組和多維數(shù)組的創(chuàng)建、定義和使用While、do-while和for語句的使用06二月202337第2章

Java語言基礎(chǔ)

本章提要:

1.Java程序的構(gòu)成2.Java的基本數(shù)據(jù)類型3.Java的運算符與表達式

4.數(shù)組5.Java流程控制語句

06二月2023382.1Java程序的構(gòu)成Java源程序是由類定義組成的,每個程序中可以定義若干個類,但是只有一個類是主類。在JavaApplication中,這個主類是指包含main方法的類;在JavaApplet中,這個主類是一個系統(tǒng)類Applet的子類,是Java程序執(zhí)行的入口點。在同一個Java源程序中定義的若干類之間沒有嚴格的邏輯關(guān)系要求,但它們通常是在一起協(xié)同工作的,每一個類都可能需要使用其他類中定義的靜態(tài)屬性或方法

。

Java程序中定義類使用關(guān)鍵字class,每個類的定義有類頭定義和類體定義兩部分組成。類體部分用來定義靜態(tài)屬性和方法這兩種類的成員,其中方法類似于其他高級語2.1.1一個Java源程序06二月202339言的函數(shù),而靜態(tài)屬性則類似于變量。類頭部分除了聲明類名之外,還可以說明類的繼承特性,當一個類被定義為是另一個已經(jīng)存在的類(稱為這個類的父類)的子類時,它就可以從其父類中繼承一些以定義好的類成員而不必自己重復(fù)編碼。Java程序的每一條Java語句都由分號結(jié)束,其構(gòu)成應(yīng)該符合Java的語法規(guī)則。類和方法中的所有語句應(yīng)該使用一對大括號括起。Java程序的每一個類中,除了靜態(tài)屬性聲明語句之外,其他的執(zhí)行具體操作的語句只能存在于類方法的大括號之中,而不能跳出方法孤立地直接書寫在類中。

06二月202340

注解是指程序中用來說明程序的文字。它是為了方便程序員理解,維護該程序,并不參與程序的編譯執(zhí)行。Java的注解有3種:單行注解符號“//”后面的單行內(nèi)容不參與編譯;多行注解用“/*…*/”包含起來的一段文本,中間可以換行;用“/**…*/”包含起來的,它可以用javadoc工具來生成HTML形式的開發(fā)文檔。也可以在寫程序的時候?qū)⒛承┐a注釋掉以便調(diào)試程序。2.1.1Java的程序注解06二月2023412.1.3Java的的標識符與關(guān)鍵字

關(guān)鍵字是Java語言保留的字符串,表示特殊的指令,而不能用來做為程序中的標識符。標識符是用來代表程序中一個元素的名字,比如變量、函數(shù)、類等。在Java中標識符由字母、下劃線、“$”和數(shù)字組成,只能以字母、“$”或者“_”開頭,中間不能有空格,并且不能使用關(guān)鍵字。但可以包含關(guān)鍵字作為它的名字的一部分。在Java中中文字符也是字符,所以也可以作標識符。Java的標識符區(qū)分大小寫,而且沒有長度的限制,可以為標識符取任意長度的名字。標識符的名字要有一定的意義,讓人一看標識符就知道這個變量、函數(shù)的大概作用,即常說的編碼規(guī)范。

06二月202342在Java語言中,有三種基本類型,即簡單類型(整型、浮點型、字符型、布爾型等)、數(shù)組類型(整型、浮點型、字符型、布爾型等)和復(fù)合類型(類、接口)??梢钥闯鯦ava的數(shù)據(jù)類型與C語言相近,其不同之處在于:首先,Java的各種數(shù)據(jù)類型占用固定的內(nèi)存長度,與具體的軟硬件平臺環(huán)境無關(guān);其次,Java的每種數(shù)據(jù)類型都對應(yīng)一個缺省的數(shù)值,使得這種數(shù)據(jù)類型的變量的取值總是確定的。這兩點分別體現(xiàn)了Java的跨平臺特性和安全穩(wěn)定性。

2.2基本數(shù)據(jù)類型06二月202343在Java語言中有四種整數(shù)類型,每種類型可以使用關(guān)鍵字byte,short,int和long中的任意一個進行聲明。所有Java編程語言中的整數(shù)類型都是帶符號的數(shù)字,不存在無符號整數(shù)。整數(shù)類型的文字可使用十進制、八進制和十六進制表示。首位為“0”表示八進制的數(shù)值,首位為“0x”表示十六進制的數(shù)值。整數(shù)類型默認為int類型,如在其后有一個字母“L”表示一個long值(也可以用小寫“l(fā)”)。

2.2.1整型

06二月202344

使用char類型可表示單個字符,字符是用單引號括起來的一個字符,如‘a(chǎn)’,‘B’等。Java中的字符型數(shù)據(jù)是16位無符號型數(shù)據(jù),它表示Unicode集,而不僅僅是ASCII集。

與C語言類似,Java也提供轉(zhuǎn)義字符,以反斜杠“\”開頭,將其后的字符轉(zhuǎn)變?yōu)榱硗獾暮x。值得注意的一點是,用雙引號引用的文字,就是我們平時所說的字符串類型不是原始類型,而是一個類string,它被用來表示字符序列。字符本身符合Unicode標準且上述char類型的轉(zhuǎn)義字符適用于string。2.2.2字符型

06二月2023452.2.3浮點型

在Java語言中有兩種浮點數(shù)類型;float和double。如果一個數(shù)包括小數(shù)點或指數(shù)部分,或者在數(shù)字后帶有字母F或f(float)、D或d(double),則該數(shù)為浮點數(shù)。如果不明確指明浮點數(shù)的類型,浮點數(shù)默認為double。

在兩種類型的浮點數(shù)中,float為32位(單精度),double為64位(雙精度)。也就是說double類型的浮點數(shù)具有更高的精度。

2.2.4邏輯型邏輯類boolean的數(shù)據(jù)類型有兩種文字值:true和false。在Java語言中boolean類型只允許使用boolean值,在整數(shù)類型和boolean類型之間無轉(zhuǎn)換計算。06二月2023462.2.5變量與常量在Java中,不同類型的數(shù)據(jù)既可以以常量的形式出現(xiàn),也可以以變量的形式出現(xiàn)。常量就是指在程序執(zhí)行期間其值不能發(fā)生變化的數(shù)據(jù),常量是固定的。

變量的值是可以變化的,它的定義包括變量名、變量類型和作用域幾個部分。注意以下幾點:(1)變量名必須是一個合法的標識符。變量名應(yīng)具有一定的含義,以增加程序的可讀性。(2)變量類型可以為前面所說的任意一種數(shù)據(jù)類型。(3)聲明一個變量的同時也就指明了變量的作用域。變量的作用域指明可訪問該變量的一段代碼。(4)變量的聲明中多個變量間用逗號隔開。(5)在Java程序中聲明變量后,需要給該變量賦值??梢杂觅x值語句來初始化變量——任何變量都不能沒有初始值,否則無法通過編譯。06二月202347

Java語言是支持兩個不同數(shù)值類型之間的強制類型轉(zhuǎn)換的,一個變量從一個類型強制轉(zhuǎn)換到另一個類型,轉(zhuǎn)化后的變量要受到新類型的制約。

類型轉(zhuǎn)換語法格式:(type)variableName

類型變量名

2.2.6數(shù)據(jù)類型的轉(zhuǎn)換06二月202348自動類型轉(zhuǎn)換整型、浮點型、字符型數(shù)據(jù)可以混合運算。在運算中不同類型的數(shù)據(jù)先轉(zhuǎn)化為同一種類型然后進行計算。自動類型轉(zhuǎn)換原則是從在機器中占位(bit)少的類型向占位多的類型方向進行轉(zhuǎn)換。強制類型轉(zhuǎn)換在Java語言中強制類型轉(zhuǎn)換是指從在機器中占位多的類型向占位少的類型方向進行轉(zhuǎn)換,例如int類型轉(zhuǎn)換成byte類型。強制類型轉(zhuǎn)換需要使用類型轉(zhuǎn)換語法格式,但是有些類型是不允許轉(zhuǎn)換成另一種類型的,例如boolean類型不能轉(zhuǎn)換成int等類型。06二月2023492.3運算符與表達式

Java語言的運算符(operator)指明對操作數(shù)所進行的運算,運算符按照操作數(shù)的數(shù)目來劃分為單目運算符(例如~、++)、雙目運算符(例如+、>)、三目運算符(例如?:)?;具\算符包括賦值運算符、算術(shù)運算符、關(guān)系運算符、邏輯運算符、位運算符、條件運算符等。Java語言的表達式是由標識符、數(shù)據(jù)和運算符等的組合而構(gòu)成的,它基本上和C\C++語言的表達式一樣。06二月2023502.3.1賦值

賦值運算符“=”把一個數(shù)據(jù)賦給另一個變量。Java語言支持簡單算術(shù)運算符和賦值運算符的作用在賦值運算符兩側(cè)的類型不一致的情況下,如果左側(cè)變量的數(shù)據(jù)類型的級別高,則就把右側(cè)的數(shù)據(jù)轉(zhuǎn)換為與左側(cè)相同的高級數(shù)據(jù)類型,然后賦值給左側(cè)的變量。否則需要使用強制類型轉(zhuǎn)換運算符。

在賦值符“=”前加上其他運算符,即構(gòu)成擴展賦值運算符。用擴展賦值運算符可表示為:varoperator=expression06二月2023512.3.2算術(shù)運算算術(shù)運算是針對數(shù)值類型操作數(shù)進行的運算。根據(jù)需要參與運算的操作數(shù)的數(shù)目要求,可將算術(shù)運算符分為雙目運算符和單目運算符兩種。雙目算術(shù)運算符雙目運算符有:+、-、*、/、%五種。要注意“/”運算符對于與整數(shù)和浮點數(shù)的運算結(jié)果是不同的。取模運算符“%”一般用于整數(shù)運算,它是用來得到余數(shù)部分。單目算術(shù)運算符變量的自增與自減和++與—出現(xiàn)在該變量的前后位置無關(guān)。無論是++x還是x++均表示x要增1,且表達式的值與運算符的位置有關(guān)。06二月2023522.3.3關(guān)系運算關(guān)系運算符也稱為比較運算符,是用于比較兩個數(shù)據(jù)之間的大小關(guān)系的運算符。關(guān)系運算結(jié)果是布爾值(true或false)。2.3.4邏輯運算邏輯運算是針對布爾型數(shù)據(jù)進行的邏輯判斷運算,運算的結(jié)果仍然是布爾型量。常用的邏輯運算符有:與(AND)、或(OR)、非(NOT)。06二月202353

2.3.5位運算位運算是對操作數(shù)以二進制比特位為單位進行的操作運算,位運算的操作數(shù)和結(jié)果都是整型量。移位運算符移位運算符是將某一變量所包含的各比特位按指定方向移動指定的位數(shù),移位運算符通過對第一個運算對象向左移位或向右移位來對數(shù)據(jù)執(zhí)行位操作,移動的位數(shù)由右邊的操作數(shù)決定,移位的方向取決于運算符本身。按位邏輯運算位運算符&、|、~、^分別提供了基于位的與、或、求反、異或操作。其中異或是指對應(yīng)的兩位數(shù)值不同時,結(jié)果為1,否則為0。

06二月2023542.3.6其他運算幾點說明:條件運算符是唯一的一個三目運算符,其結(jié)構(gòu)如下:條件?表達式1:表達式2其含義是如果條件的計算結(jié)果為真,則結(jié)果為表達式1的計算結(jié)果,否則為表達式2的計算結(jié)果。instanceof用來決定第一個運算對象是否為第二個運算對象的一個實例。06二月2023552.3.7運算符的優(yōu)先級運算符的優(yōu)先級決定了表達式中執(zhí)行不同運算的先后順序,在運算符優(yōu)先級相同時,運算的進行次序取決于運算符的結(jié)合性。運算符的結(jié)合性分為左結(jié)合和右結(jié)合,左結(jié)合就是按照從左向右的次序計算表達式,而右結(jié)合就是按照從右到左的次序計算表達式。

06二月2023562.4數(shù)組

Java語言中,數(shù)組是一種最簡單的復(fù)合數(shù)據(jù)類型。數(shù)組的主要特點如下:數(shù)組是相同數(shù)據(jù)類型的元素的集合;數(shù)組中的各元素是有先后順序的,連續(xù)存放在內(nèi)存之中;每個數(shù)組中的元素用整個數(shù)組的名字和它在數(shù)組中的位置(稱為下標)表達。06二月2023572.4.1數(shù)組聲明、創(chuàng)建、初始化聲明數(shù)組聲明數(shù)組是定義一個數(shù)組的名稱、維數(shù)和數(shù)組元素的類型。有兩種定義格式:格式1:數(shù)組元素類型數(shù)組名[];格式2:數(shù)組元素類型[]數(shù)組名;其中數(shù)組元素的類型可以是基本類型,也可以是類或接口。創(chuàng)建數(shù)組數(shù)組聲明只是定義了數(shù)組名和類型,并未指定元素的個數(shù)。與變量一樣,數(shù)組的每個元素需要占用存儲空間,因此必須通過某種方式規(guī)定數(shù)組的大小,進而確定數(shù)組需要的空間。給已聲明的數(shù)組分配空間可采用如下格式:

數(shù)組名=new數(shù)組元素類型[數(shù)組元素個數(shù)]

06二月202358也可以在聲明數(shù)組的同時給數(shù)組規(guī)定空間,一旦數(shù)組創(chuàng)建以后,數(shù)組就有了固定長度的結(jié)構(gòu),數(shù)組中各元素通過下標來區(qū)分,下標從0開始,下標最大值為數(shù)組元素的個數(shù)減1。當數(shù)組的元素類型為基本類型時,在創(chuàng)建存儲空間時將按照默認規(guī)定給各元素賦初值。數(shù)組的初始化

給數(shù)組元素分配空間和賦初值可以采取以下方式:聲明數(shù)組時給數(shù)組一個初值表,格式如下:

類型數(shù)組名[]={初值表};所有的數(shù)組都有一個屬性length,它代表了數(shù)組元素的個數(shù)。使用數(shù)組時,要注意下標不要超出范圍。如果下標超出范圍,則運行時會產(chǎn)生“數(shù)組訪問越界異?!薄?6二月2023592.4.2數(shù)組使用在方法調(diào)用中,數(shù)組也可以作為方法參數(shù)來傳遞。但要注意數(shù)組是屬于引用類型的參數(shù)傳遞,也就是在方法中對虛參數(shù)組的操作會影響實參數(shù)組。在Java語言應(yīng)用程序的main方法中有一個字符串數(shù)組參數(shù),該數(shù)組中存放所有的命令行參數(shù),命令行參數(shù)是給Java語言應(yīng)用程序提供數(shù)據(jù)的手段之一,它跟在命令行運行的主類名之后,各參數(shù)之間用空格分隔。使用命令行參數(shù)有利于提高應(yīng)用程序的通用性。如果命令行參數(shù)中有引號,則兩個引號之間的字符系列為一個參數(shù),空格作為參數(shù)的分隔符。如果引號不匹配,則從最后一個引號到行尾的所有字符將作為一個參數(shù)。06二月2023602.4.2多維數(shù)組Java語言中,多維數(shù)組被看作數(shù)組的數(shù)組,多維數(shù)組的定義是通過對一維數(shù)組的嵌套來實現(xiàn)的。即用數(shù)組的數(shù)組來定義多維數(shù)組。多維數(shù)組中最常用的是二維數(shù)組,下面主要以二維數(shù)組為例介紹多維數(shù)組的使用。聲明數(shù)組

二維數(shù)組的聲明與一維數(shù)組類似,如下所示:格式1:數(shù)組元素類型數(shù)組名[][]格式2:數(shù)組元素類型[][]數(shù)組名;06二月202361二維數(shù)組的創(chuàng)建和初始化為二維數(shù)組創(chuàng)建存儲空間有兩種方式:直接為每個一維數(shù)組分配空間;從最高維開始,按照由高到低的順序為每一維數(shù)據(jù)分配空間Java語言中,由于把二維數(shù)組看作是數(shù)組的數(shù)組,不要求二維數(shù)組中每一維數(shù)組的大小相同。要獲取數(shù)組的行數(shù),可以通過如下方式獲得:數(shù)組名.length要獲取數(shù)組的列數(shù)則要先確定行,再通過如下方式獲取列數(shù):數(shù)組名[行標].length在二維數(shù)組創(chuàng)建空間時,如果元素是基本類型,系統(tǒng)將按照默認規(guī)則賦初值;如果元素類型為其他引用類型,則其所有元素為未賦初值狀態(tài)(null)。但可以在數(shù)組定義時同時進行初始化。06二月2023622.5流程控制語句流程控制語句是用來控制程序中各語句執(zhí)行順序的語句,使程序設(shè)計中非常關(guān)鍵和基本的部分。流程控制語句可以把單個的語句組合成有意義的、能完成一定功能的小模塊。最主要的流程控制方式是結(jié)構(gòu)化程序設(shè)計中規(guī)定的三種基本流程結(jié)構(gòu)。2.5.1結(jié)構(gòu)化程序設(shè)計的三種基本流程結(jié)構(gòu)化程序設(shè)計原則是公認的面向過程編程應(yīng)遵循的原則,它使得程序段的邏輯結(jié)構(gòu)清晰、層次分明,有效地改善了局部程序段的可讀性和可靠性,保證了程序質(zhì)量,提高了程序開發(fā)的效率。06二月202363結(jié)構(gòu)化程序設(shè)計的最基本原則是:任何程序都是可以由三種基本流程結(jié)構(gòu)構(gòu)成,即順序結(jié)構(gòu)、分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。06二月202364三種流程結(jié)構(gòu)的主要特點是:均為單入單出結(jié)構(gòu),每種結(jié)構(gòu)僅有一個入口點,結(jié)構(gòu)執(zhí)行完畢后,僅有一個出口點。順序結(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)可以相互嵌套。06二月2023652.5.2順序結(jié)構(gòu)順序結(jié)構(gòu)是三種結(jié)構(gòu)中最簡單的一種,即語句按照書寫的順序依次執(zhí)行。從宏觀上來看,整個程序就是一個順序結(jié)構(gòu)。2.5.3選擇結(jié)構(gòu)Java中的分支結(jié)構(gòu)可以由兩種選擇語句來實現(xiàn),一個是實現(xiàn)雙選擇的if語句,另一個是實現(xiàn)多分支的switch開關(guān)語句。06二月202366if語句if語句的一般形式是:if(條件表達式)語句塊;//if分支

else

語句塊;//else分支塊其中條件表達式用來選擇判斷程序的流程走向。在程序的實際執(zhí)行過程中,如果條件表達式的取值為真,則執(zhí)行if分支的語句塊,否則執(zhí)行else分支的語句塊。在編寫程序時,也可以不書寫else分支,此時若條件表達式的取值為假,則繞過if分支直接執(zhí)行if語句后的其他語句。有時也會用到if-else復(fù)合結(jié)構(gòu)。但要注意else字句不能單獨作為語句使用,它必須和if配對使用。

06二月202367switch語句switch語句是多分支的開關(guān)語句,它的一般格式如下:switch(表達式){case判斷值1:語句塊1;//分支1case判斷值2:語句塊2;//分支2……case判斷值n:語句塊n;//分支ndefault:語句塊n+1//分支n+1}

switch語句執(zhí)行時,首先計算表達式的值,這個值必須是整型或字符型,同時應(yīng)與各個case分支的判斷值的類型相一致。計算出表達式的值之后,將它先與第一個case分支的判斷值相比較。若相同,則程序轉(zhuǎn)入第一個case分06二月202368支的語句塊;否則,再將表達式的值與第二個分支相比較……依此類推。如果表達式的值與任何一個case分支都不相同,則轉(zhuǎn)而執(zhí)行最后的default分支;在default分支不存在的情況下,則跳出整個switch語句。各個case和default出現(xiàn)的次序不影響執(zhí)行的結(jié)果。

需要注意各個case后面的常量不能有相同的值。還有各個語句塊可以有多條語句,不必使用大括號。switch語句也允許嵌套。還要注意的是,switch語句的每一個case判斷,都只負責(zé)指明流程分支的入口點,而不負責(zé)指定分支的出口點,分支的出口點需要編程時用相應(yīng)的跳轉(zhuǎn)語句來標明。06二月2023692.5.4循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)是利用循環(huán)語句來實現(xiàn)的。循環(huán)語句是在一定條件下反復(fù)執(zhí)行一段代碼,被反復(fù)執(zhí)行的程序段稱為循環(huán)體。Java語言中提供的循環(huán)語句有三種:while語句、do-while語句、for語句。

06二月202370while語句while語句的一般形式是:

while(條件表達式)

循環(huán)體while語句的執(zhí)行時,首先檢查表達式的值是否為真,若為真,則執(zhí)行循環(huán)體,然后繼續(xù)判斷是否繼續(xù)循環(huán),直到表達式的值為假,直到表達式的值為假,執(zhí)行后續(xù)語句。循環(huán)體通常是一個組合語句,也可以是單個語句。

while循環(huán)的特點是“先判斷,后執(zhí)行”。如果條件已開始就不滿足,則循環(huán)執(zhí)行為0次。另外,在循環(huán)體中通常通過執(zhí)行某個操作來改變循環(huán)條件,如果循環(huán)條件不改變,則循環(huán)會陷入死循環(huán)中。在程序設(shè)計中要避免死循環(huán)。06二月202371do-while語句如果需要在任何情況下都先執(zhí)行一遍循環(huán)體,則可以采用do-while循環(huán),它的格式如下:do{

循環(huán)體}while(條件表達式)do-while循環(huán)的特點是:“先執(zhí)行,后判斷”,在執(zhí)行時,先執(zhí)行循環(huán)體的語句,在檢查表達式,若表達式的值為真,則繼續(xù)執(zhí)行循環(huán)體,否則,結(jié)束循環(huán),執(zhí)行后續(xù)語句。與while循環(huán)相比,循環(huán)體至少要執(zhí)行一次。06二月202372for語句

for語句一般用于事先能夠確定循環(huán)次數(shù)的場合,其格式為:

for(控制變量設(shè)定初值;循環(huán)條件;迭代部分)循環(huán)體for語句執(zhí)行時,首先執(zhí)行初始化操作,然后判斷終止條件是否滿足,如果滿足,則執(zhí)行循環(huán)體中的語句,最后通過執(zhí)行迭代部分給控制變量增值。完成一次循環(huán)后,重新判斷終止條件。使用for循環(huán)要注意一下幾點:初始化、終止條件以及迭代部分都可以為空(但分號不能少),三者均為空時,相當于一個無限循環(huán)。在初始化部分和迭代部分可以使用逗號表達式,來進行多個操作。06二月2023732.5.5跳轉(zhuǎn)語句循環(huán)嵌套三種循環(huán)語句可以自身嵌套,也可以相互嵌套。嵌套將循環(huán)分為內(nèi)外兩層,外層循環(huán)每循環(huán)一次,內(nèi)層循環(huán)要執(zhí)行一圈。注意編寫嵌套循環(huán)時,不能出現(xiàn)內(nèi)外循環(huán)的結(jié)構(gòu)交叉現(xiàn)象。break語句在switch語句中,break語句已經(jīng)得到應(yīng)用。在各類循環(huán)語句中,break語句也提供了一種方便的跳出循環(huán)的方法。它有兩種使用形式:

06二月202374

break//不帶標號,從break直接所在處的循環(huán)體中跳轉(zhuǎn)出來

break標號名

//帶標號,跳出標號所指的代碼塊,執(zhí)行塊后的下一條語句給代碼塊加標號的格式如下:BlockLabel:{codeBlock}continue語句continue語句用來結(jié)束本次循環(huán),跳過循環(huán)體中下面尚未執(zhí)行的語句,接著進行終止條件的判斷,以決定是否繼續(xù)循環(huán)。對于for語句,在進行終止條件的判斷前,還要先執(zhí)行迭代語句。它有兩種形式:continue//不帶標號,終止當前一輪的循環(huán),繼續(xù)下一輪循環(huán)continue標號

//帶標號,跳轉(zhuǎn)到標號所指示的外層循環(huán)中06二月2023752.6本章小結(jié)本章是Java語言程序設(shè)計的基礎(chǔ),該章主要是對程序的組成元素和邏輯進行介紹。Java語言中的數(shù)據(jù)類型有簡單數(shù)據(jù)類型和復(fù)合數(shù)據(jù)類型兩種,其中簡單數(shù)據(jù)類型包括整數(shù)類型、浮點數(shù)類型、字符類型和布爾類型;復(fù)合數(shù)據(jù)類型包括類、接口和數(shù)組。表達式是由運算符和操作數(shù)組成的符號序列,對一個表達式進行運算時,要按照運算符的優(yōu)先順序從高到低進行,同級的運算符則按照結(jié)合性決定運算次序。06二月202376

數(shù)組是具有相同類型元素的有序集合,數(shù)組的創(chuàng)建分為定義、分配內(nèi)存以及初始化等階段。通過下標變量訪問數(shù)組中的元素。經(jīng)常用循環(huán)語句來控制對數(shù)組元素的訪問,但要注意訪問不要越界。條件語句、循環(huán)語句和跳轉(zhuǎn)語句是Java語言中常用的控制語句。對這些語句的正確理解和運用非常重要。程序設(shè)計的關(guān)鍵是要將算法思路轉(zhuǎn)化為可實現(xiàn)的語句。第三章類和對象

06二月202378學(xué)習(xí)目的:了解面向?qū)ο蠡靖拍?/p>

掌握類的創(chuàng)建和使用

掌握對象的創(chuàng)建與使用了解參數(shù)的傳遞

了解匿名對象

學(xué)習(xí)重點:掌握類的創(chuàng)建和使用

掌握對象的創(chuàng)建與使用06二月202379第三章類和對象

本章提要:面向?qū)ο蠡靖拍铑惖膭?chuàng)建和使用對象的創(chuàng)建與使用參數(shù)的傳遞匿名對象

06二月2023803.1面向?qū)ο蟮某绦蛟O(shè)計方法概述

3.1.1抽象

抽象是人們解決問題的主要手段,也是面向?qū)ο蟪绦蛟O(shè)計解決實際問題法寶之一。所謂抽象就是指從眾多的事物面向?qū)ο蟪绦蛟O(shè)計標志著程序設(shè)計思想發(fā)展到一個新的高度,它用一種更符合人們認識客觀世界的思維方式進行程序設(shè)計:相對于面向過程的程序設(shè)計以研究問題的解決過程為主體,面向?qū)ο缶幊淌且詫ο鬄橹黧w,使編程富于創(chuàng)造性,提高了程序的可重用性,簡化了編程過程,同時也使程序更易于維護。06二月202381中舍棄個別的、非本質(zhì)的屬性,抽出共同的、本質(zhì)的屬性的過程。是面向?qū)ο蟪绦蛟O(shè)計的核心概念。用面向?qū)ο缶幊探鉀Q現(xiàn)實世界的問題時,首先是利用抽象技術(shù)將現(xiàn)實世界中的各種實體,歸納總結(jié)出共性的東西形成一類實體的基本特征。這些特征包括屬性和行為,這些本質(zhì)屬性和方法的有機組合,就是面向?qū)ο蠓椒ㄖ械念悺?.1.2封裝

封裝性是面向?qū)ο缶幊痰幕咎匦灾?,它通過封裝隱蔽了對象的內(nèi)部實現(xiàn)細節(jié)。對象的封裝有兩個方面:06二月202382一方面表示對象的屬性和方法是不可分割的整體。對象的屬性和方法封裝為一體具有重要的意義,因為它反映了對象同時具有了客觀事物的靜態(tài)特征和動態(tài)行為相統(tǒng)一的客觀規(guī)律,使軟件對客觀事物的描述更接近人類表述;而過去的面向過程的編程語言都是將功能和數(shù)據(jù)相分離,使軟件對客觀事物的描述存在偏差,很難自然地用語言表達客觀事物的對應(yīng)關(guān)系。另一方面,封裝還表示對象內(nèi)部細節(jié)的隱蔽性。對內(nèi)部細節(jié)的隱蔽性反映了事物客觀的相對獨立性,這樣既可以防止外界的干擾,又可以降低復(fù)雜性。在java語言中,對象、類和包逐層封裝,為管理大量的對象和類提供了方便,也增強了語言的安全性。隱藏了內(nèi)部細節(jié)也使得java的使用者和設(shè)計者分離,使用者只需用接口去滿足軟件重用的策略,可以降低軟件開發(fā)成本,縮短開發(fā)周期,是軟件的開發(fā)和維護得到根本性的改善。06二月202383訪問對象,而不必知道對象的內(nèi)部細節(jié)。從軟件工程的角度講,封裝也符合模塊化設(shè)計原則,滿足軟件重用的策略,可以降低軟件開發(fā)成本,縮短開發(fā)周期,是軟件的開發(fā)和維護得到根本性的改善。

3.1.3

繼承面向?qū)ο蟪绦蛟O(shè)計的另一重要特點是類的繼承性。繼承是讓一個類成為另一個類的子類,子類繼承父類的所有特性,并可以擴充自己的特性。這種關(guān)系為共享數(shù)據(jù)和操作提供了一種良好的機制。繼承提高了軟件的重用性、可用性和界面的一致性。根據(jù)繼承的特性,可以將繼承分為如下兩種主要形式:06二月202384(1)直接繼承和間接繼承。如果類c的定義直接繼承于類b,則稱c直接繼承于b,且b是c的直接父類;如果又有b類又直接繼承于a類,則可稱c類間接繼承于a類。間接繼承體現(xiàn)了繼承關(guān)系的可傳遞性。(2)單繼承和多繼承。如果一個類只有一個直接父類,則稱該關(guān)系為單繼承;如果一個類有多于一個以上的父類,則稱該繼承關(guān)系為多繼承。Java語言只支持單繼承,而不支持多繼承。

3.1.4

多態(tài)多態(tài)性也是面向?qū)ο缶幊痰囊粋€特性,它反映了現(xiàn)實世界中謀類事物中的每個實體,都具有一些不同于其它實體的某些方面,也是針對于類中有相似功能的06二月202385不同方法以同一方法名來定義。這樣,可以用相同的方式調(diào)用不同的同名方法。Java中通過方法的重寫和方法重載類實現(xiàn)多態(tài)。3.2類

類是組成java程序的基本要素,也是java程序設(shè)計的重要思想表現(xiàn)。作為程序的基本要素,類封裝了某個對象范疇的狀態(tài)和方法,可以看作定義對象的模板。3.2.1類聲明類聲明的最一般格式為:[類修飾符]class類名[extends父類名][implements[,接口名]06二月202386{…//類體}其中,[]中的元素表示可選項。大括號對“{}”及之間的內(nèi)容為類體。類修飾符表示類的性質(zhì),主要是對于訪問權(quán)限的限定。類的修飾符主要有:

l

Public公共類修飾符。表示可以被相同包中的類繼承或訪問,而不同包中的類也可以通過import引用后再繼承或訪問。l

Final終結(jié)類修飾符。這將在第五章介紹。l

Abstract抽象類修飾符。它沒有方法的實現(xiàn),也沒有構(gòu)造方法。不能用new運算符實例化。不能被繼承。也將在第五章進行詳細介紹。06二月202387class表示類聲明的開始,class為關(guān)鍵字,用來定義類?!癱lass類名”部分用來聲明類。類名必須符合java對標識符的命名標準,如果類名使用拉丁字母,習(xí)慣上首字母使用大寫;類名為容易識別的關(guān)系可用多個單詞復(fù)合而成,此時習(xí)慣每個單詞首字母大寫。關(guān)鍵字extends表示類繼承了某個父類,父類名必須是java標準類名或程序本身已定義過的類名。關(guān)鍵字implements表示繼承某個接口,若有多個接口則接口間用逗號隔開。3.2.2類體

類是創(chuàng)建對象的模板,因此它應(yīng)該能夠描述一類事物共有的屬性和功能,這個描述過程由類體實現(xiàn)。類聲明之后的一對大括號“{”、“}”以及它們之間的內(nèi)容稱06二月202388做類體,大括號之間的內(nèi)容稱做類體的內(nèi)容。類體的內(nèi)容由兩部分構(gòu)成:一部分是變量的定義,用來刻畫事物的屬性;另一部分是方法的定義,用來描述事物的功能。例子3.1:定義一個People類,類體內(nèi)容的變量定義部分定義了1個double類型變量“身高”、1個布爾類型變量“性別”、兩個個字符串類型變量“姓名”和“職業(yè)”,和一個方法“人物簡介”。classPeople{double身高;//定義變量部分

booblean性別=true;//定義變量時可以同時進行賦值

String姓名,職業(yè);

publicvoid人物間介()//方法定義

{

System.out.println(“個人基本資料:”+姓名+性別+身高+職業(yè));}}06二月202389當然,上述類的定義還可以有別的屬性,如“婚否”等,也可以有別的方法,如“業(yè)余愛好”等。特別注意的是:在變量定義部分可以將變量定義部分可以和變量的賦值同時進行,但不可以如下這樣做:classPeople{double身高;//定義變量部分

booblean性別;//定義變量和賦值分開進行

性別=true;

…因為,加下畫線的語句屬于對變量操作語句,而不是定義語句。所有變量的操作語句只能放在方法種進行。06二月2023903.2.4類的變量上一節(jié)提到類體分為變量定義和方法兩部分。變量除了在類體變量定義部分進行定義外,還可以在方法內(nèi)部定義;另外,成員變量又可以分為靜態(tài)變量和實例變量。1)成員變量的定義格式[修飾符]變量類型變量名=初值;其中,變量名應(yīng)為合法的標識符,盡量做到見名知意;變量類型通常指變量的基本數(shù)據(jù)類型。其中變量類型和變量名兩項不可以省略。有時候某些類的實例也會作為類的成員變量,對象成員的定義格式如下:類名對象名=new類名([參數(shù)表]);大家可以類比一下普通變量和對象定義的關(guān)系。06二月202391

1)變量的修飾符變量的修飾符有進行訪問控制的修飾符和非訪問控制的修飾符兩種,主要的訪問控制修飾符有public、protected等,這些修飾符主要在繼承等訪問時進行訪問權(quán)限的控制,將在第五章進行詳細介紹;非訪問控制符主要有static、final等,將在后面單獨介紹。2)成員變量和局部變量變量按照定義的位置,可以分為成員變量和局部變量。變量定義部分定義的變量稱為類的成員變量,成員變量在整個方法內(nèi)有效,且和它在類體中書寫的順序無關(guān);在方法內(nèi)部定義的變量或方法的參數(shù)稱為局部變量,局部變量只在定義它的方法內(nèi)有效。例3.2:在例3.1的基礎(chǔ)上增加一些變量及方法。06二月202392classPeople{double身高;//全局變量

booblean性別=true;String姓名,職業(yè);

publicvoid人物間介() //方法定義{age=30; //合法,因為age為全局變量,切合定義位置無關(guān)String愛好=“圍棋”; //局部變量

System.out.println(“個人基本資料:”+姓名+年齡+性別+身高+職業(yè)+愛好); }

intage;publicvoidspeak(Strings){System.out.println(“我的娛樂是”+愛好);//非法,變量愛好是局部變量}}在變量定義過程中,有時會出現(xiàn)成員變量和局部變量同名的情況,此時,在出現(xiàn)局部變量的方法中,同名的成員變量會被隱藏,即這個成員變量會在這個方法內(nèi)暫時失效。06二月202393如:classTest{inta=30;publicstaticvoidmian(args[]) {inta=60;System.out.println(“a=”+a);}}程序輸出結(jié)果為a=60,因為全局變量a對于main方法來說,已經(jīng)失效。但有的時候還需要在出現(xiàn)上述情況的方法中還使用全局變量,就必須使用關(guān)鍵字this。特別是希望某些方法得到的參數(shù)作為全局變量來用時,如下例所示。例3.3:編寫一個類,能夠根據(jù)一個方法的參數(shù)來修改全局變量a。classTest{

06二月202394staticStringa=“全局變量”;

publicString修改字符串(Stringa) {Stringa;this.a=a;//方法中的參數(shù)和全局變量同一化

System.out.println(“a=”+a);}}

1)靜態(tài)成員變量(類成員變量或類變量)與實例成員變量(實例變量)如果成員變量的類型關(guān)鍵字前面有關(guān)鍵字static,這樣的成員變量稱作類變量或靜態(tài)成員變量。如:classdog{floatx;//實例成員變量

staticinty;//類變量…}06二月202395如果一個類中的某個成員變量是類變量,那么所有類的實例對象的這個類變量都分配給同一處的內(nèi)存,修改了其中一個對象的這個類變量,其他類的這個類變量也會隨之改變。也就是說,類變量被所有對象共享。3.2.3構(gòu)造方法

根據(jù)類創(chuàng)建對象時,總是使用一個特殊的方法來初始化對象,這個方法稱為構(gòu)造方法。構(gòu)造方法的名字要求與類同名(包括大小寫),且無返回值。在創(chuàng)建對象時,java語言都會自動調(diào)用構(gòu)造方法為新對象進行初始化。一個類可以創(chuàng)建多個構(gòu)造方法,但必須具有不同的參數(shù),也就是說,構(gòu)造方法可以重載。利用不同參數(shù)調(diào)用不同的構(gòu)造方法,可以實現(xiàn)對象的不同初始化。例3.4:還是people類的定義:06二月202396classPeople{Stringname,career;booleansex;//true代表女,false代表男

intage;doubleheight;//從姓名、年齡角度分析people類時使用

publicPeople(Stringname,intage) { =name; this.age=age;System.out.println(“姓名:”+name+“\n”+“年齡:”+age); }//從性別、職業(yè)角度分析people類時使用publicPeople(Stringcareer,booleansex) { this.career=career; this.sex=sex;System.out.println(“性別:”+sex+“\n”+“年齡:”+age); } publicPeople()//如果有前面定義的構(gòu)造方法,最好也定義此構(gòu)造方法: { }}06二月202397使用構(gòu)造方法進行初始化的好處是避免了在生成對象后每次都調(diào)用對象的初始化方法,構(gòu)造方法內(nèi)部成員遵循前面局部變量的使用規(guī)則??偨Y(jié)構(gòu)造方法有以下特點:l

構(gòu)造方法名與類名必須大小寫及拼寫完全一致。l

構(gòu)造方法用于對象初始化,不需返回值,但是不必用void說明。l

構(gòu)造方法不能被程序調(diào)用,只能通過new運算符調(diào)用。l

構(gòu)造方法可由編程人員在類中定義,當用戶沒有定義時,java語言會自動生成一個為空的構(gòu)造方法,當用new調(diào)用默認的構(gòu)造方法時,對象被初始化為內(nèi)部各數(shù)據(jù)相應(yīng)數(shù)據(jù)類型的默認值;但是當用戶定義有構(gòu)造方法時,默認的構(gòu)造方法會失效,如果還要用的話,最好把默認的構(gòu)造方法顯式地定義出來。06二月202398構(gòu)造方法對于創(chuàng)建對象非常關(guān)鍵。雖然在大多數(shù)情況下,類的對象都是調(diào)用有參數(shù)的構(gòu)造方法,方便對象變量的初始化。

同時,類定義時如果沒有聲明任何構(gòu)造方法,系統(tǒng)會賦給此來一個默認(無參)的構(gòu)造方法。但是,一旦用戶在類中聲明了構(gòu)造方法(有參),系統(tǒng)將不會再賦給這個類默認的構(gòu)造方法了。所以,好的習(xí)慣是:要么不聲明構(gòu)造方法,要么聲明兩個以上構(gòu)造方法,兩個中包括一個無參數(shù)的構(gòu)造方法。3.2.5終結(jié)函數(shù)終結(jié)方法:finalize(),該方法包含在java.Long.Object類中。java語言自動管理內(nèi)存,可以自動進行垃圾收集,在收集前自動調(diào)用對象的finalize()方法來釋放系統(tǒng)資源。finalize方法06二月202399很相似c++中的析構(gòu)函數(shù)。但由于java有垃圾回收機制,并且java垃圾回收器的使用不由程序員控制,也無規(guī)律可循,有可能在程序終止時都沒有啟動的機會。因此,這樣的資源回收并不是可靠的方法。這種垃圾回收器的不確定性,有時會給程序運行帶來麻煩,比如說在某段時間系統(tǒng)產(chǎn)生了大量的待釋放資源卻無法有效釋放。為了解決這種麻煩,java里提供了System.gc()方法,使用這個方法,可以強制啟動垃圾回收器,進而自動執(zhí)行finalize()方法。例3.5:一個finalize的一個典型應(yīng)用示例。classPerson{ publicvoidfinalize() { System.out.println("theobjectisgone!"); }

06二月2023100publicstaticvoidmain(String[]args) { newPerson(); newPerson(); newPerson();System.gc(); System.out.println("theprogramisending!"); }}運行結(jié)果如圖3-1。

圖3-1對象的釋放

3.2.6類方法和實例方法06二月2023101正如成員變量分為類變量和實例變量一樣,類的方法也分為類方法和實例方法。如:classdog{floatx()//實例方法{…return…}staticinty();//類方法{…

return…}}若一個方法被聲明為類方法,則它只能對類變量進行操作,且象類變量一樣,類的所有實例對象共享同一個類方法。如:06二月2023102classtest{inta=3;staticintb;floatf(intx,inty){a=x;b=y;//變量引用合法,因為f為實例方法returnx*y;}staticfloatg(intx,inty){a=x;b=2*a;//變量a引用不合法,因為g為類方法,而a為實例變量returnx*y;}}3.3

對象的創(chuàng)建和使用知道類是創(chuàng)建對象的模板。當用一個類創(chuàng)建了一個對象時,意味著一類事物中具體的某個客觀實體被程序表述了。在面相對對象的程序中,對象是由屬性和方法封裝而成,屬性是實體的一些特征值或構(gòu)件,方法是實體的功能和行為。06二月2023103對象可以被看作復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。一個對象的生命周期分為三個階段:生成、使用和清除。3.3.1創(chuàng)建對象創(chuàng)建一個對象包括兩個步驟:聲明對象和為對象分配內(nèi)存。1)對象的聲明一般格式為:類名對象名如:People張三這里people是前面定義的一個類的名字,張三是聲明對象的名字。但此時對象“張三”的內(nèi)存中沒有任何數(shù)據(jù),即“張三”還是一個空對象,不能使用。要是用這個對象還必須為這個對象分配內(nèi)存,也叫做為對象分配實體。06二月2023104

1)為對象分配內(nèi)存為對象分配內(nèi)存,即使用new運算符和類的構(gòu)造方法實例化某個對象。如果類中沒有構(gòu)造方法,系統(tǒng)會自動調(diào)用默認的構(gòu)造方法(沒有參數(shù),名字遵循普通構(gòu)造方法的要

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論