版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第1章
Java語(yǔ)言概述
06二月20232學(xué)習(xí)目的:了解程序設(shè)計(jì)語(yǔ)言的發(fā)展歷史了解Java語(yǔ)言的特色和應(yīng)用背景了解Java虛擬機(jī)、Java的運(yùn)行環(huán)境和Java編程語(yǔ)言開(kāi)發(fā)環(huán)境初步掌握簡(jiǎn)單Java程序的創(chuàng)建、編譯和運(yùn)行學(xué)習(xí)重點(diǎn)面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言
Java虛擬機(jī)Java的運(yùn)行環(huán)境Java程序的創(chuàng)建、編譯和運(yùn)行06二月20233第1章
Java語(yǔ)言概述
本章提要:
1.程序設(shè)計(jì)語(yǔ)言概述2.Java語(yǔ)言簡(jiǎn)介3.
Java語(yǔ)言概述
4.簡(jiǎn)單Java程序的創(chuàng)建、編譯及運(yùn)行步驟06二月202341.1程序設(shè)計(jì)語(yǔ)言概述
1.1.1計(jì)算機(jī)程序設(shè)計(jì)方法和語(yǔ)言隨著計(jì)算機(jī)硬件與通訊技術(shù)的發(fā)展,計(jì)算機(jī)應(yīng)用領(lǐng)域越來(lái)越廣泛,應(yīng)用規(guī)模也越來(lái)越大,程序設(shè)計(jì)不再是一、兩個(gè)程序員可完成的任務(wù),在這種情況下編寫(xiě)程序不再片面追求高效率,而是綜合考慮程序的可靠性、可擴(kuò)展性、可重用性和可理解性等因素。
程序設(shè)計(jì)方法是獨(dú)立于具體程序設(shè)計(jì)語(yǔ)言的一門(mén)技術(shù)。由于程序設(shè)計(jì)通常離不開(kāi)程序設(shè)計(jì)語(yǔ)言作為工具,所以容易混淆程序設(shè)計(jì)方法與程序設(shè)計(jì)語(yǔ)言的概念。程序設(shè)計(jì)語(yǔ)言的設(shè)計(jì)目的主要是為了支持某種程序設(shè)計(jì)方法。06二月20235早期的程序設(shè)計(jì)早期的高級(jí)程序設(shè)計(jì)語(yǔ)言有FORTROM、COBOL、BASIC等。這一時(shí)期由于追求程序的高效率,程序員過(guò)份依賴技巧與天份,不太注重程序的結(jié)構(gòu),。一個(gè)典型問(wèn)題是程序中的控制隨意跳轉(zhuǎn),即不加限制地使用goto語(yǔ)句,這樣的程序?qū)﹂喿x者來(lái)說(shuō)是難以理解的,程序員也難以修改程序。結(jié)構(gòu)化的程序設(shè)計(jì)隨著程序規(guī)模與復(fù)雜性的不斷增長(zhǎng),20世紀(jì)60年代誕生了結(jié)構(gòu)化程序設(shè)計(jì)方法。結(jié)構(gòu)化程序設(shè)計(jì)方法的主要技術(shù)是自頂向下、逐步求精,采用單入口/單輸出的控制結(jié)構(gòu)。這一程序設(shè)計(jì)方法的代表語(yǔ)言是Pascal、C、Ado等。06二月20236
自頂向下是一種分解問(wèn)題的技術(shù),與控制結(jié)構(gòu)有關(guān)。逐步求精指對(duì)結(jié)構(gòu)化程序進(jìn)行分解,最終使其成為三種基本控制結(jié)構(gòu)的組合。結(jié)構(gòu)化程序設(shè)計(jì)的結(jié)果是一個(gè)程序最終由若干過(guò)程組成,每一個(gè)過(guò)程完成一個(gè)明確的功能。面向?qū)ο蟪绦蛟O(shè)計(jì)
雖然結(jié)構(gòu)化程序設(shè)計(jì)提高了軟件生產(chǎn)率和軟件質(zhì)量,但隨著程序規(guī)模與復(fù)雜性的增長(zhǎng),程序中的數(shù)據(jù)結(jié)構(gòu)變得與這些數(shù)據(jù)上的操作同樣重要。在大型結(jié)構(gòu)化程序中,一個(gè)數(shù)據(jù)結(jié)構(gòu)可能由許多個(gè)過(guò)程來(lái)處理,修改數(shù)據(jù)結(jié)構(gòu)將影響到所有相關(guān)的過(guò)程。在由幾百個(gè)過(guò)程組成的成千上萬(wàn)行的結(jié)構(gòu)化程序中,這種情況變得相當(dāng)麻煩并且容易產(chǎn)生錯(cuò)誤。
06二月20237
20世紀(jì)80年代興起的面向?qū)ο蟪绦蛟O(shè)計(jì)方法在結(jié)構(gòu)化程序設(shè)計(jì)的基礎(chǔ)上提出了一種新的設(shè)計(jì)思路,最重要的改變是程序圍繞被操作的數(shù)據(jù)來(lái)設(shè)計(jì),而不是圍繞操作本身。面向?qū)ο蟪绦蛟O(shè)計(jì)以類作為構(gòu)造程序的基本單位,具有封裝、數(shù)據(jù)抽象、繼承、多態(tài)化等特點(diǎn)。較有影響的面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言有Simula、C++、Java等。Java語(yǔ)言是在C++語(yǔ)言基礎(chǔ)上發(fā)展起來(lái)的一種適合分布式計(jì)算的新型面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言,也是目前推廣最快的程序設(shè)計(jì)語(yǔ)言。Java語(yǔ)言將面向?qū)ο?、平臺(tái)無(wú)關(guān)性、穩(wěn)定性與安全性、多線程等特征集于一身,為用戶提供了一個(gè)良好的程序設(shè)計(jì)環(huán)境,特別適合因特網(wǎng)的應(yīng)用開(kāi)發(fā)。與當(dāng)前迅速發(fā)展的因特網(wǎng)應(yīng)用緊密結(jié)合是Java語(yǔ)言成功的關(guān)鍵所在。
06二月202381.1.2
計(jì)算機(jī)程序設(shè)計(jì)方法和語(yǔ)言面向?qū)ο笈c面向過(guò)程的區(qū)別
早期的編程語(yǔ)言如Fortran語(yǔ)言和C語(yǔ)言基本上都是面向過(guò)程的語(yǔ)言,主要是采用數(shù)學(xué)語(yǔ)言方式編程的語(yǔ)言,其編程的主要思路專注于算法的實(shí)現(xiàn)。
傳統(tǒng)的面向過(guò)程的編程在描述問(wèn)題時(shí),由兩部分組成:數(shù)據(jù):描述實(shí)體狀態(tài)的數(shù)據(jù)結(jié)構(gòu);過(guò)程:操作這些狀態(tài)數(shù)據(jù)的程序和步驟。
面向過(guò)程編程的一個(gè)顯著特點(diǎn)是數(shù)據(jù)與程序的分開(kāi)。數(shù)據(jù)是靜止的東西,不會(huì)自行變化,必須通過(guò)過(guò)程操作來(lái)改變數(shù)據(jù),因此,函數(shù)調(diào)用在面向過(guò)程編程中被大量使用。06二月20239
針對(duì)程序結(jié)構(gòu)不清晰而無(wú)法維護(hù)改進(jìn)的局面。面向?qū)ο缶幊烫岢隽艘环N全新的思路,讓計(jì)算機(jī)語(yǔ)言結(jié)構(gòu)像人類思維方式一樣簡(jiǎn)單和清晰。面向?qū)ο蟮能浖_(kāi)發(fā)中將世界上的事物均看成對(duì)象,任一對(duì)象有兩個(gè)特征:行為與狀態(tài)。每個(gè)對(duì)象可以通過(guò)自身的行為來(lái)改變自己的狀態(tài)。在面向?qū)ο蟮氖澜缰校ㄟ^(guò)對(duì)象間的協(xié)作與交互來(lái)運(yùn)作。由于將對(duì)象的操作封閉在對(duì)象內(nèi),外部要與對(duì)象進(jìn)行交互只能通過(guò)給對(duì)象發(fā)送“消息”,這個(gè)消息實(shí)際上就是調(diào)用對(duì)象的某個(gè)行為方法,消息中還包括方法的參數(shù)。06二月202310面向?qū)ο蟪绦蛟O(shè)計(jì)的特性封裝性
面向?qū)ο蟮牡谝粋€(gè)原則是把數(shù)據(jù)和該數(shù)據(jù)的操作都封裝在一個(gè)類中,比如說(shuō)筆記本電腦就是一個(gè)類。筆記本電腦這個(gè)類有許多屬性,有些是靜態(tài)的(數(shù)據(jù)),比如:顯示屏的亮度,本身的重量;有些是動(dòng)態(tài)的(對(duì)數(shù)據(jù)的操作),比如:可以按下組合鍵“ctrl+F4”或“ctrl+F5”來(lái)調(diào)整顯示器的亮度,可以卸掉它的外掛光驅(qū)來(lái)減輕它的重量。
對(duì)象是類的一個(gè)實(shí)例化結(jié)果,對(duì)象具有類所描述的所有的屬性以及方法。比如不同品牌、不同樣式的筆記本電腦之間的共同屬性就是它們所屬的類——筆記本電腦類的屬性。只不過(guò)類是抽象的東西,而對(duì)象是具體的,對(duì)象具有它隸屬類的所有屬性,包括靜態(tài)的和動(dòng)態(tài)的。06二月202311
每個(gè)對(duì)象都有自己的存儲(chǔ)空間,可容納其他對(duì)象,或者說(shuō)通過(guò)封裝現(xiàn)有的對(duì)象,可以產(chǎn)生新型對(duì)象。因此,盡管對(duì)象的概念非常簡(jiǎn)單,但是經(jīng)過(guò)封裝以后卻可以在程序中達(dá)到任意高的復(fù)雜程度。
每個(gè)對(duì)象都屬于某個(gè)類。根據(jù)語(yǔ)法,每個(gè)對(duì)象都是某個(gè)“類”的實(shí)例。一個(gè)類的最重要的特征就是“能將什么消息發(fā)給它?”,也就是類本身有哪些操作。面向?qū)ο蟪绦蛟O(shè)計(jì)就是設(shè)計(jì)好相關(guān)的類,類中有靜態(tài)的域,和動(dòng)態(tài)的方法。繼承性繼承是在類、子類、以及對(duì)象之間自動(dòng)地共享屬性和方法的機(jī)制。類的上層可以有父類、下層可以有子類,形成一種層次結(jié)構(gòu)。一個(gè)類將直接繼承其父類的屬性和行為06二月202312,而且繼承還具有傳遞性,因此,它還將間接繼承所有祖先類的屬性和行為。
繼承最主要的優(yōu)點(diǎn)是重復(fù)使用性,通過(guò)繼承可以無(wú)限繁衍出更多的類,這樣的結(jié)果可讓軟件的開(kāi)發(fā)加速,同時(shí)可達(dá)到程序共享的好處。通過(guò)繼承可以直接繼承系統(tǒng)提供的或他人寫(xiě)作的類,并加以改寫(xiě),進(jìn)而得到功能的不斷擴(kuò)充。
繼承的另一個(gè)優(yōu)點(diǎn)是在于接口的一致性。當(dāng)超類繁衍出許多子類時(shí),它的行為接口通過(guò)繼承可以傳給其所有子類。因此可以通過(guò)統(tǒng)一的行為接口去訪問(wèn)不同的子類對(duì)象的方法,但不同子類中行為的具體實(shí)現(xiàn)可能時(shí)不一樣的。06二月202313多態(tài)性多態(tài)是指在表示特定功能時(shí),有多種不同的形態(tài)或?qū)崿F(xiàn)方法。常見(jiàn)的多態(tài)形式有兩種:方法的重載:即在同一個(gè)類中某個(gè)方法有多種形態(tài),其方法名相同,但參數(shù)不同,所以也稱參數(shù)多態(tài)。方法的覆蓋:在子類中重新定義一個(gè)與父類有相同形態(tài)的方法,這樣,在子類中將覆蓋從父類繼承來(lái)的那個(gè)方法。多態(tài)為描述客觀事物提供了極大的能動(dòng)性。參數(shù)多態(tài)提供了方法的多種使用形態(tài),方便使用者的調(diào)用;而覆蓋多態(tài)則使得用戶可以用同樣的方式對(duì)待不同的對(duì)象,不同的對(duì)象可以用它們自己的方式響應(yīng)同一消息。用戶可以通過(guò)父類去引用子類的對(duì)象,執(zhí)行方法時(shí)則表現(xiàn)出每個(gè)子類對(duì)象各自的行為。
06二月202314抽象性這里的抽象有兩個(gè)層次的含義,一是體現(xiàn)在類的層次設(shè)計(jì)中,高層類是底層類的抽象表述。類層次設(shè)計(jì)體現(xiàn)著不斷抽象的過(guò)程。第二體現(xiàn)在類與對(duì)象之間的關(guān)系上,類是一個(gè)抽象的概念,而對(duì)象是具體的。面向?qū)ο缶幊痰暮诵氖窃O(shè)計(jì)類,但實(shí)際運(yùn)行操作的是對(duì)象。類是對(duì)象的模板,對(duì)象的創(chuàng)建是以類為基礎(chǔ)。同一類創(chuàng)建的對(duì)象具有共同的屬性,但屬性值不同。06二月2023151.2程序設(shè)計(jì)語(yǔ)言概述Java語(yǔ)言有下面一些特點(diǎn):簡(jiǎn)單性Java語(yǔ)言是一種面向?qū)ο蟮恼Z(yǔ)言,它通過(guò)提供最基本的方法來(lái)完成指定的任務(wù),只需理解一些基本的概念,就可以用它編寫(xiě)出適合于各種情況的應(yīng)用程序。Java略去了運(yùn)算符重載、多重繼承等模糊的概念,并且通過(guò)實(shí)現(xiàn)自動(dòng)垃圾收集大大簡(jiǎn)化了程序設(shè)計(jì)者的內(nèi)存管理工作。另外,Java也適合于在小型機(jī)上運(yùn)行。
1.2.1Java語(yǔ)言的特色06二月202316面向?qū)ο驤ava語(yǔ)言的設(shè)計(jì)集中于對(duì)象及其接口,它提供了簡(jiǎn)單的類機(jī)制以及動(dòng)態(tài)的接口型。對(duì)象中封裝了它的狀態(tài)變量以及相應(yīng)的方法,實(shí)現(xiàn)了模塊化和信息隱藏;而類則提供了一類對(duì)象的原型,并且通過(guò)繼承機(jī)制,子類可以使用父類所提供的方法,實(shí)現(xiàn)了代碼的復(fù)用。分布性
Java是面向網(wǎng)絡(luò)的語(yǔ)言。通過(guò)它提供的類庫(kù)可以處理TCP/IP協(xié)議,用戶可以通過(guò)URL地址在網(wǎng)絡(luò)上很方便地訪問(wèn)其它對(duì)象。
06二月202317魯棒性Java在編譯和運(yùn)行程序時(shí),都要對(duì)可能出現(xiàn)的問(wèn)題進(jìn)行檢查,以消除錯(cuò)誤的產(chǎn)生。它提供自動(dòng)垃圾收集來(lái)進(jìn)行內(nèi)存管理,防止程序員在管理內(nèi)存時(shí)容易產(chǎn)生的錯(cuò)誤。通過(guò)集成的面向?qū)ο蟮睦馓幚頇C(jī)制,在編譯時(shí),Java提示出可能出現(xiàn)但未被處理的例外,幫助程序員正確地進(jìn)行選擇以防止系統(tǒng)的崩潰。另外,Java在編譯時(shí)還可捕獲類型聲明中的許多常見(jiàn)錯(cuò)誤,防止動(dòng)態(tài)運(yùn)行時(shí)不匹配問(wèn)題的出現(xiàn)。06二月202318安全性
用于網(wǎng)絡(luò)、分布環(huán)境下的Java必須要防止病毒的入侵。Java不支持指針,一切對(duì)內(nèi)存的訪問(wèn)都必須通過(guò)對(duì)象的實(shí)例變量來(lái)實(shí)現(xiàn),這樣就防止程序員使用“特洛伊”木馬等欺騙手段訪問(wèn)對(duì)象的私有成員,同時(shí)也避免了指針操作中容易產(chǎn)生的錯(cuò)誤。體系結(jié)構(gòu)中立
Java解釋器生成與體系結(jié)構(gòu)無(wú)關(guān)的字節(jié)碼指令,只要安裝了Java運(yùn)行時(shí)系統(tǒng),Java程序就可在任意的處理器上運(yùn)行。這些字節(jié)碼指令對(duì)應(yīng)于Java虛擬機(jī)中的表示,Java解釋器得到字節(jié)碼后,對(duì)它進(jìn)行轉(zhuǎn)換,使之能夠在不同的平臺(tái)運(yùn)行。
06二月202319可移植性
與平臺(tái)無(wú)關(guān)的特性使Java程序可以方便地被移植到網(wǎng)絡(luò)上的不同機(jī)器。同時(shí),Java的類庫(kù)中也實(shí)現(xiàn)了與不同平臺(tái)的接口,使這些類庫(kù)可以移植。另外,Java編譯器是由Java語(yǔ)言實(shí)現(xiàn)的,Java運(yùn)行時(shí)系統(tǒng)由標(biāo)準(zhǔn)C實(shí)現(xiàn),這使得Java系統(tǒng)本身也具有可移植性。解釋執(zhí)行Java解釋器直接對(duì)Java字節(jié)碼進(jìn)行解釋執(zhí)行。字節(jié)碼本身攜帶了許多編譯時(shí)信息,使得連接過(guò)程更加簡(jiǎn)單。高性能和其它解釋執(zhí)行的語(yǔ)言如BASIC、TCL不同,Java字節(jié)碼的設(shè)計(jì)使之能很容易地直接轉(zhuǎn)換成對(duì)應(yīng)于特定CPU的機(jī)器碼,從而得到較高的性能。06二月202320多線程
多線程機(jī)制使應(yīng)用程序能夠并行執(zhí)行,而且同步機(jī)制保證了對(duì)共享數(shù)據(jù)的正確操作。通過(guò)使用多線程,程序設(shè)計(jì)者可以分別用不同的線程完成特定的行為,而不需要采用全局的事件循環(huán)機(jī)制,這樣就很容易地實(shí)現(xiàn)網(wǎng)絡(luò)上的實(shí)時(shí)交互行為。動(dòng)態(tài)性
Java的設(shè)計(jì)使它適合于一個(gè)不斷發(fā)展的環(huán)境。在類庫(kù)中可以自由地加入新的方法和實(shí)例變量而不會(huì)影響用戶程序的執(zhí)行。并且Java通過(guò)接口來(lái)支持多重繼承,使之比嚴(yán)格的類繼承具有更靈活的方式和擴(kuò)展性。06二月2023211.2.2Java的應(yīng)用背景Java語(yǔ)言對(duì)軟件開(kāi)發(fā)技術(shù)的影響Java語(yǔ)言將對(duì)未來(lái)軟件的開(kāi)發(fā)產(chǎn)生影響,可從如下幾個(gè)方面考慮:軟件的需求分析:可將用戶的需求進(jìn)行動(dòng)態(tài)的、可視化描述,以提供設(shè)計(jì)者更加直觀的要求。而用戶的需求是各色各樣的,不受地區(qū)、行業(yè)、部門(mén)、愛(ài)好的影響,都可以用Java語(yǔ)言描述清楚。軟件的開(kāi)發(fā)方法:由于Java語(yǔ)言的面向目標(biāo)的特性,所以完全可以用面向?qū)ο蟮募夹g(shù)與方法來(lái)開(kāi)發(fā),這是符合最新的軟件開(kāi)發(fā)規(guī)范要求的。
06二月202322Java語(yǔ)言的動(dòng)畫(huà)效果遠(yuǎn)比GUI技術(shù)更加逼真,尤其是利用Internet提供的巨大動(dòng)畫(huà)資源空間,可以共享全世界的動(dòng)態(tài)畫(huà)面的資源。軟件最終產(chǎn)品:用Java語(yǔ)言開(kāi)發(fā)的軟件可以具有可視化、可聽(tīng)化、可操作化的交互、動(dòng)畫(huà)與動(dòng)作,要它停就停,要它繼續(xù)就繼續(xù),而這是在電影與電視播放過(guò)程中難以做到的。其它:使用Java語(yǔ)言對(duì)開(kāi)發(fā)效益、開(kāi)發(fā)價(jià)值都有比較明顯的影響。
06二月202323Java語(yǔ)言的應(yīng)用前景
Java語(yǔ)言有著廣泛的應(yīng)用前景,大體上可以從以下幾個(gè)方面來(lái)考慮其應(yīng)用:所有面向?qū)ο蟮膽?yīng)用開(kāi)發(fā),包括面向?qū)ο蟮氖录枋觥⑻幚怼⒕C合等。計(jì)算過(guò)程的可視化、可操作化的軟件的開(kāi)發(fā)。動(dòng)態(tài)畫(huà)面的設(shè)計(jì),包括圖形圖像的調(diào)用。交互操作的設(shè)計(jì)(選擇交互、定向交互、控制流程等)。Internet的系統(tǒng)管理功能模塊的設(shè)計(jì),包括Web頁(yè)面的動(dòng)態(tài)設(shè)計(jì)、管理和交互操作設(shè)計(jì)等。Intranet(企業(yè)內(nèi)部網(wǎng))上的軟件開(kāi)發(fā)(直接面向企業(yè)內(nèi)部用戶的軟件)。與各類數(shù)據(jù)庫(kù)連接查詢的SQL語(yǔ)句實(shí)現(xiàn)。其它應(yīng)用類型的程序。06二月2023241.3程序設(shè)計(jì)語(yǔ)言簡(jiǎn)介
用Java可寫(xiě)兩種類型的程序:小程序(又叫JavaApplet)和應(yīng)用程序(Javaapplicatian)。
小程序是嵌入在HTML文檔種的Java程序;而Java應(yīng)用程序是從命令行運(yùn)行的程序。對(duì)Java而言,Java小程序的大小和復(fù)雜性都沒(méi)有限制。由于WWW使小程序的發(fā)布十分便利,因此小程序更適合作為Internet上的應(yīng)用程序。
應(yīng)用程序(JavaApplication)是可以獨(dú)立運(yùn)行的Java程序,有Java解釋器控制執(zhí)行。Applet則不能獨(dú)立運(yùn)行,而是被嵌入到Web頁(yè)中,有Java兼容瀏覽器控制執(zhí)行。
06二月202325
Java程序在編譯后生成的不是某種CPU的指令碼,而是Java語(yǔ)言特有的字節(jié)代碼。Java字節(jié)代碼運(yùn)行在Java虛擬機(jī)上。
每一個(gè)操作系統(tǒng)的Java解釋器是不同的,但實(shí)現(xiàn)Java虛擬機(jī)時(shí)相同的,這就是Java語(yǔ)言與平臺(tái)無(wú)關(guān)的關(guān)鍵所在。Java虛擬機(jī)由五部分組成:一組指令集、一組寄存器、一個(gè)堆棧、一個(gè)無(wú)用內(nèi)存單元收集器、一個(gè)方法區(qū)域,這五個(gè)部分是Java虛擬機(jī)的邏輯抽象成分,不倚賴于任何實(shí)現(xiàn)技術(shù)或組織,但是它們的功能必須在真實(shí)機(jī)器上以某種來(lái)實(shí)現(xiàn)。Java虛擬機(jī)內(nèi)存區(qū)域不倚賴實(shí)現(xiàn)內(nèi)存的位置,也不要求連續(xù),但要求邏輯的長(zhǎng)度固定。
1.3.1Java的虛擬機(jī)06二月202326
Java虛擬機(jī)支持240多個(gè)字節(jié)代碼,每個(gè)字節(jié)代碼執(zhí)行一種基本的CPU運(yùn)算。Java語(yǔ)言指令集相當(dāng)于Java語(yǔ)言程序的“匯編語(yǔ)言”,Java語(yǔ)言指令集的一條指令有一個(gè)操作碼、領(lǐng)個(gè)或多個(gè)操作數(shù)。操作數(shù)指定實(shí)施的操作,操作數(shù)是操作碼所需要的參數(shù)。Java語(yǔ)言的操作碼均為一個(gè)字節(jié)長(zhǎng),操作數(shù)沒(méi)有限制。
Java虛擬機(jī)的寄存器用于保存機(jī)器的運(yùn)行狀態(tài)。Java虛擬機(jī)寄存器有四種:Java語(yǔ)言程序計(jì)數(shù)器;指向操作數(shù)棧頂端的指針;指向當(dāng)前執(zhí)行方法的執(zhí)行環(huán)境的指針;指向當(dāng)前執(zhí)行方法局部變量的區(qū)第一個(gè)變量的指針。Java虛擬機(jī)是用堆棧來(lái)處理數(shù)據(jù)傳遞的,它不定義或使用寄存器來(lái)傳遞或接受參數(shù)。目的是為了保證指令集的簡(jiǎn)潔性和實(shí)現(xiàn)時(shí)的高效性。06二月202327
Java虛擬機(jī)的堆棧有三個(gè)區(qū)域:局部變量區(qū)、執(zhí)行環(huán)境區(qū)和操作數(shù)區(qū)。Java虛擬機(jī)的堆棧是運(yùn)行時(shí)刻動(dòng)態(tài)分配的對(duì)象存儲(chǔ)區(qū)域。Java語(yǔ)言可以進(jìn)行自動(dòng)的無(wú)須內(nèi)存單元的收集,程序無(wú)須顯示釋放占有的內(nèi)存空間,無(wú)須內(nèi)存單元自動(dòng)回收的算法倚賴于虛擬機(jī)最終實(shí)現(xiàn)的硬件環(huán)境。
Java虛擬機(jī)的方法區(qū)是編譯后的代碼區(qū)域,包含方法代碼、符號(hào)表等。
06二月2023281.3.2Java的運(yùn)行環(huán)境的配置Java不僅提供了一個(gè)豐富的語(yǔ)言和運(yùn)行環(huán)境,而且還提供了一個(gè)免費(fèi)的Java開(kāi)發(fā)工具集(JavaDevelopersKits,簡(jiǎn)稱JDK,也稱SDK)。編程人員和最終用戶可以利用這些工具來(lái)開(kāi)發(fā)Java程序或調(diào)用Java內(nèi)容。
SUN的Java不僅提了一個(gè)豐富的語(yǔ)言和運(yùn)行環(huán)境,而且還提了一個(gè)免費(fèi)的Java開(kāi)發(fā)工具集(SDK)。開(kāi)發(fā)人員和最終用戶可以利用這個(gè)工具來(lái)開(kāi)發(fā)Java程序。SDK簡(jiǎn)單易學(xué),可以通過(guò)任何文本編輯器編寫(xiě)Java源文件,然后在DOS狀況下利通過(guò)javac命令將Java源程序編譯成字節(jié)碼,通過(guò)Java命令來(lái)執(zhí)行編譯后的Java文件。
06二月202329SDK的另一個(gè)顯著特點(diǎn)是隨著Java(J2EE、J2SE以及J2ME)版本的升級(jí)而升級(jí)。但它的缺點(diǎn)也是非常明顯的就是從事大規(guī)模企業(yè)級(jí)Java應(yīng)用開(kāi)發(fā)非常困難,不能進(jìn)行復(fù)雜的Java軟件開(kāi)發(fā),也不利于團(tuán)體協(xié)同開(kāi)發(fā)。建立Java開(kāi)發(fā)環(huán)境JDK開(kāi)發(fā)環(huán)境中常用工具介紹在Java環(huán)境中的Java工具主要有:*appletviewer小應(yīng)用程序?yàn)g覽器*java解釋器*javac編譯器*javah頭文件生成器*javadocAPI文檔生成器*javap類文件反匯編器*sdbJava語(yǔ)言調(diào)試器06二月2023301.3.1Java的虛擬機(jī)目前可供開(kāi)發(fā)人員選擇得Java語(yǔ)言開(kāi)發(fā)工具有很多,例如:Sun公司的SDK(命令行方式的)Java語(yǔ)言編輯器,用Java語(yǔ)言開(kāi)發(fā)的圖形化界面的JavaWorkShop,Symmatec公司的VisualCafé,微軟公司的VisualJ++,Borland公司的JBuilder等等。開(kāi)發(fā)人員選擇開(kāi)發(fā)工具可以根據(jù)以下原則:開(kāi)發(fā)界面是否友好,編譯效率是否高,是否有可視化的調(diào)試器,能否在瀏覽器中調(diào)試Java語(yǔ)言小程序,能否為使用者完成一些重復(fù)的勞動(dòng)等。06二月2023311.4簡(jiǎn)單Java程序的創(chuàng)建、編譯及運(yùn)行步驟Java是解釋型的高級(jí)編程語(yǔ)言,所以Java程序的開(kāi)發(fā)通常需要編寫(xiě)源程序、編譯生成字節(jié)碼和運(yùn)行幾個(gè)過(guò)程。編寫(xiě)源程序編寫(xiě)源程序是程序開(kāi)發(fā)的第一步,我們只需要簡(jiǎn)單的文字編輯器,如Edit或記事本或集成開(kāi)發(fā)環(huán)境中的編輯窗口,利用這些文字編輯器將源程序錄入到計(jì)算機(jī)中,形成一個(gè)文件保存起來(lái)。注意必須要保證Java程序是無(wú)格式的純文本文件。
06二月202332編譯和運(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。
06二月2023331.5本章小結(jié)本章介紹了Java語(yǔ)言的產(chǎn)生和特點(diǎn)。給出了兩種Java程序,Java應(yīng)用程序和JavaApplet程序的調(diào)試步驟。JavaApplication在命令方式下進(jìn)行調(diào)試,而JavaApplet在瀏覽器的環(huán)境下運(yùn)行。Java語(yǔ)言是一門(mén)純面向?qū)ο蟮木幊陶Z(yǔ)言。
面向?qū)ο缶幊痰乃悸氛J(rèn)為程序都是對(duì)象的組合,因此要克服面向過(guò)程編程的思路,直接按照對(duì)象和類的思想去組織程序,面向?qū)ο笏哂械姆庋b性、繼承性、多態(tài)性等特點(diǎn)使其具有強(qiáng)大的生命力。
06二月202334Sun公司為全世界Java開(kāi)發(fā)人員提供了一套免費(fèi)的軟件開(kāi)發(fā)包Java2SDK,也稱為JDK,它不僅是Java的開(kāi)發(fā)平臺(tái),還是Java的運(yùn)行平臺(tái)。Java源程序存放在.java文件中,可以通過(guò)任意一個(gè)文本編輯器編輯產(chǎn)生,源程序經(jīng)過(guò)“javac”命令編譯過(guò)后,就生成了相應(yīng)的.class文件。第2章
Java語(yǔ)言基礎(chǔ)
06二月202336學(xué)習(xí)目的:了解Java程序的構(gòu)成
了解Java的基本數(shù)據(jù)類型
了解Java的運(yùn)算符與表達(dá)式
了解數(shù)組的創(chuàng)建、定義和使用掌握J(rèn)ava流程控制語(yǔ)句
初步掌握java簡(jiǎn)單程序的編寫(xiě)學(xué)習(xí)重點(diǎn):
Java的基本數(shù)據(jù)類型、運(yùn)算符與表達(dá)式
一維數(shù)組和多維數(shù)組的創(chuàng)建、定義和使用While、do-while和for語(yǔ)句的使用06二月202337第2章
Java語(yǔ)言基礎(chǔ)
本章提要:
1.Java程序的構(gòu)成2.Java的基本數(shù)據(jù)類型3.Java的運(yùn)算符與表達(dá)式
4.數(shù)組5.Java流程控制語(yǔ)句
06二月2023382.1Java程序的構(gòu)成Java源程序是由類定義組成的,每個(gè)程序中可以定義若干個(gè)類,但是只有一個(gè)類是主類。在JavaApplication中,這個(gè)主類是指包含main方法的類;在JavaApplet中,這個(gè)主類是一個(gè)系統(tǒng)類Applet的子類,是Java程序執(zhí)行的入口點(diǎn)。在同一個(gè)Java源程序中定義的若干類之間沒(méi)有嚴(yán)格的邏輯關(guān)系要求,但它們通常是在一起協(xié)同工作的,每一個(gè)類都可能需要使用其他類中定義的靜態(tài)屬性或方法
。
Java程序中定義類使用關(guān)鍵字class,每個(gè)類的定義有類頭定義和類體定義兩部分組成。類體部分用來(lái)定義靜態(tài)屬性和方法這兩種類的成員,其中方法類似于其他高級(jí)語(yǔ)2.1.1一個(gè)Java源程序06二月202339言的函數(shù),而靜態(tài)屬性則類似于變量。類頭部分除了聲明類名之外,還可以說(shuō)明類的繼承特性,當(dāng)一個(gè)類被定義為是另一個(gè)已經(jīng)存在的類(稱為這個(gè)類的父類)的子類時(shí),它就可以從其父類中繼承一些以定義好的類成員而不必自己重復(fù)編碼。Java程序的每一條Java語(yǔ)句都由分號(hào)結(jié)束,其構(gòu)成應(yīng)該符合Java的語(yǔ)法規(guī)則。類和方法中的所有語(yǔ)句應(yīng)該使用一對(duì)大括號(hào)括起。Java程序的每一個(gè)類中,除了靜態(tài)屬性聲明語(yǔ)句之外,其他的執(zhí)行具體操作的語(yǔ)句只能存在于類方法的大括號(hào)之中,而不能跳出方法孤立地直接書(shū)寫(xiě)在類中。
06二月202340
注解是指程序中用來(lái)說(shuō)明程序的文字。它是為了方便程序員理解,維護(hù)該程序,并不參與程序的編譯執(zhí)行。Java的注解有3種:?jiǎn)涡凶⒔夥?hào)“//”后面的單行內(nèi)容不參與編譯;多行注解用“/*…*/”包含起來(lái)的一段文本,中間可以換行;用“/**…*/”包含起來(lái)的,它可以用javadoc工具來(lái)生成HTML形式的開(kāi)發(fā)文檔。也可以在寫(xiě)程序的時(shí)候?qū)⒛承┐a注釋掉以便調(diào)試程序。2.1.1Java的程序注解06二月2023412.1.3Java的的標(biāo)識(shí)符與關(guān)鍵字
關(guān)鍵字是Java語(yǔ)言保留的字符串,表示特殊的指令,而不能用來(lái)做為程序中的標(biāo)識(shí)符。標(biāo)識(shí)符是用來(lái)代表程序中一個(gè)元素的名字,比如變量、函數(shù)、類等。在Java中標(biāo)識(shí)符由字母、下劃線、“$”和數(shù)字組成,只能以字母、“$”或者“_”開(kāi)頭,中間不能有空格,并且不能使用關(guān)鍵字。但可以包含關(guān)鍵字作為它的名字的一部分。在Java中中文字符也是字符,所以也可以作標(biāo)識(shí)符。Java的標(biāo)識(shí)符區(qū)分大小寫(xiě),而且沒(méi)有長(zhǎng)度的限制,可以為標(biāo)識(shí)符取任意長(zhǎng)度的名字。標(biāo)識(shí)符的名字要有一定的意義,讓人一看標(biāo)識(shí)符就知道這個(gè)變量、函數(shù)的大概作用,即常說(shuō)的編碼規(guī)范。
06二月202342在Java語(yǔ)言中,有三種基本類型,即簡(jiǎn)單類型(整型、浮點(diǎn)型、字符型、布爾型等)、數(shù)組類型(整型、浮點(diǎn)型、字符型、布爾型等)和復(fù)合類型(類、接口)。可以看出Java的數(shù)據(jù)類型與C語(yǔ)言相近,其不同之處在于:首先,Java的各種數(shù)據(jù)類型占用固定的內(nèi)存長(zhǎng)度,與具體的軟硬件平臺(tái)環(huán)境無(wú)關(guān);其次,Java的每種數(shù)據(jù)類型都對(duì)應(yīng)一個(gè)缺省的數(shù)值,使得這種數(shù)據(jù)類型的變量的取值總是確定的。這兩點(diǎn)分別體現(xiàn)了Java的跨平臺(tái)特性和安全穩(wěn)定性。
2.2基本數(shù)據(jù)類型06二月202343在Java語(yǔ)言中有四種整數(shù)類型,每種類型可以使用關(guān)鍵字byte,short,int和long中的任意一個(gè)進(jìn)行聲明。所有Java編程語(yǔ)言中的整數(shù)類型都是帶符號(hào)的數(shù)字,不存在無(wú)符號(hào)整數(shù)。整數(shù)類型的文字可使用十進(jìn)制、八進(jìn)制和十六進(jìn)制表示。首位為“0”表示八進(jìn)制的數(shù)值,首位為“0x”表示十六進(jìn)制的數(shù)值。整數(shù)類型默認(rèn)為int類型,如在其后有一個(gè)字母“L”表示一個(gè)long值(也可以用小寫(xiě)“l(fā)”)。
2.2.1整型
06二月202344
使用char類型可表示單個(gè)字符,字符是用單引號(hào)括起來(lái)的一個(gè)字符,如‘a(chǎn)’,‘B’等。Java中的字符型數(shù)據(jù)是16位無(wú)符號(hào)型數(shù)據(jù),它表示Unicode集,而不僅僅是ASCII集。
與C語(yǔ)言類似,Java也提供轉(zhuǎn)義字符,以反斜杠“\”開(kāi)頭,將其后的字符轉(zhuǎn)變?yōu)榱硗獾暮x。值得注意的一點(diǎn)是,用雙引號(hào)引用的文字,就是我們平時(shí)所說(shuō)的字符串類型不是原始類型,而是一個(gè)類string,它被用來(lái)表示字符序列。字符本身符合Unicode標(biāo)準(zhǔn)且上述char類型的轉(zhuǎn)義字符適用于string。2.2.2字符型
06二月2023452.2.3浮點(diǎn)型
在Java語(yǔ)言中有兩種浮點(diǎn)數(shù)類型;float和double。如果一個(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位(雙精度)。也就是說(shuō)double類型的浮點(diǎn)數(shù)具有更高的精度。
2.2.4邏輯型邏輯類boolean的數(shù)據(jù)類型有兩種文字值:true和false。在Java語(yǔ)言中boolean類型只允許使用boolean值,在整數(shù)類型和boolean類型之間無(wú)轉(zhuǎn)換計(jì)算。06二月2023462.2.5變量與常量在Java中,不同類型的數(shù)據(jù)既可以以常量的形式出現(xiàn),也可以以變量的形式出現(xiàn)。常量就是指在程序執(zhí)行期間其值不能發(fā)生變化的數(shù)據(jù),常量是固定的。
變量的值是可以變化的,它的定義包括變量名、變量類型和作用域幾個(gè)部分。注意以下幾點(diǎn):(1)變量名必須是一個(gè)合法的標(biāo)識(shí)符。變量名應(yīng)具有一定的含義,以增加程序的可讀性。(2)變量類型可以為前面所說(shuō)的任意一種數(shù)據(jù)類型。(3)聲明一個(gè)變量的同時(shí)也就指明了變量的作用域。變量的作用域指明可訪問(wèn)該變量的一段代碼。(4)變量的聲明中多個(gè)變量間用逗號(hào)隔開(kāi)。(5)在Java程序中聲明變量后,需要給該變量賦值??梢杂觅x值語(yǔ)句來(lái)初始化變量——任何變量都不能沒(méi)有初始值,否則無(wú)法通過(guò)編譯。06二月202347
Java語(yǔ)言是支持兩個(gè)不同數(shù)值類型之間的強(qiáng)制類型轉(zhuǎn)換的,一個(gè)變量從一個(gè)類型強(qiáng)制轉(zhuǎn)換到另一個(gè)類型,轉(zhuǎn)化后的變量要受到新類型的制約。
類型轉(zhuǎn)換語(yǔ)法格式:(type)variableName
類型變量名
2.2.6數(shù)據(jù)類型的轉(zhuǎn)換06二月202348自動(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語(yǔ)言中強(qiáng)制類型轉(zhuǎn)換是指從在機(jī)器中占位多的類型向占位少的類型方向進(jìn)行轉(zhuǎn)換,例如int類型轉(zhuǎn)換成byte類型。強(qiáng)制類型轉(zhuǎn)換需要使用類型轉(zhuǎn)換語(yǔ)法格式,但是有些類型是不允許轉(zhuǎn)換成另一種類型的,例如boolean類型不能轉(zhuǎn)換成int等類型。06二月2023492.3運(yùn)算符與表達(dá)式
Java語(yǔ)言的運(yùn)算符(operator)指明對(duì)操作數(shù)所進(jìn)行的運(yùn)算,運(yùn)算符按照操作數(shù)的數(shù)目來(lái)劃分為單目運(yùn)算符(例如~、++)、雙目運(yùn)算符(例如+、>)、三目運(yùn)算符(例如?:)?;具\(yùn)算符包括賦值運(yùn)算符、算術(shù)運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符、位運(yùn)算符、條件運(yùn)算符等。Java語(yǔ)言的表達(dá)式是由標(biāo)識(shí)符、數(shù)據(jù)和運(yùn)算符等的組合而構(gòu)成的,它基本上和C\C++語(yǔ)言的表達(dá)式一樣。06二月2023502.3.1賦值
賦值運(yùn)算符“=”把一個(gè)數(shù)據(jù)賦給另一個(gè)變量。Java語(yǔ)言支持簡(jiǎn)單算術(shù)運(yùn)算符和賦值運(yùn)算符的作用在賦值運(yùn)算符兩側(cè)的類型不一致的情況下,如果左側(cè)變量的數(shù)據(jù)類型的級(jí)別高,則就把右側(cè)的數(shù)據(jù)轉(zhuǎn)換為與左側(cè)相同的高級(jí)數(shù)據(jù)類型,然后賦值給左側(cè)的變量。否則需要使用強(qiáng)制類型轉(zhuǎn)換運(yùn)算符。
在賦值符“=”前加上其他運(yùn)算符,即構(gòu)成擴(kuò)展賦值運(yùn)算符。用擴(kuò)展賦值運(yùn)算符可表示為:varoperator=expression06二月2023512.3.2算術(shù)運(yùn)算算術(shù)運(yùn)算是針對(duì)數(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)算符對(duì)于與整數(shù)和浮點(diǎn)數(shù)的運(yùn)算結(jié)果是不同的。取模運(yùn)算符“%”一般用于整數(shù)運(yùn)算,它是用來(lái)得到余數(shù)部分。單目算術(shù)運(yùn)算符變量的自增與自減和++與—出現(xiàn)在該變量的前后位置無(wú)關(guān)。無(wú)論是++x還是x++均表示x要增1,且表達(dá)式的值與運(yùn)算符的位置有關(guān)。06二月2023522.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)算是針對(duì)布爾型數(shù)據(jù)進(jìn)行的邏輯判斷運(yùn)算,運(yùn)算的結(jié)果仍然是布爾型量。常用的邏輯運(yùn)算符有:與(AND)、或(OR)、非(NOT)。06二月202353
2.3.5位運(yùn)算位運(yùn)算是對(duì)操作數(shù)以二進(jìn)制比特位為單位進(jìn)行的操作運(yùn)算,位運(yùn)算的操作數(shù)和結(jié)果都是整型量。移位運(yùn)算符移位運(yùn)算符是將某一變量所包含的各比特位按指定方向移動(dòng)指定的位數(shù),移位運(yùn)算符通過(guò)對(duì)第一個(gè)運(yùn)算對(duì)象向左移位或向右移位來(lái)對(duì)數(shù)據(jù)執(zhí)行位操作,移動(dòng)的位數(shù)由右邊的操作數(shù)決定,移位的方向取決于運(yùn)算符本身。按位邏輯運(yùn)算位運(yùn)算符&、|、~、^分別提供了基于位的與、或、求反、異或操作。其中異或是指對(duì)應(yīng)的兩位數(shù)值不同時(shí),結(jié)果為1,否則為0。
06二月2023542.3.6其他運(yùn)算幾點(diǎn)說(shuō)明:條件運(yùn)算符是唯一的一個(gè)三目運(yùn)算符,其結(jié)構(gòu)如下:條件?表達(dá)式1:表達(dá)式2其含義是如果條件的計(jì)算結(jié)果為真,則結(jié)果為表達(dá)式1的計(jì)算結(jié)果,否則為表達(dá)式2的計(jì)算結(jié)果。instanceof用來(lái)決定第一個(gè)運(yùn)算對(duì)象是否為第二個(gè)運(yùn)算對(duì)象的一個(gè)實(shí)例。06二月2023552.3.7運(yùn)算符的優(yōu)先級(jí)運(yùn)算符的優(yōu)先級(jí)決定了表達(dá)式中執(zhí)行不同運(yùn)算的先后順序,在運(yùn)算符優(yōu)先級(jí)相同時(shí),運(yùn)算的進(jìn)行次序取決于運(yùn)算符的結(jié)合性。運(yùn)算符的結(jié)合性分為左結(jié)合和右結(jié)合,左結(jié)合就是按照從左向右的次序計(jì)算表達(dá)式,而右結(jié)合就是按照從右到左的次序計(jì)算表達(dá)式。
06二月2023562.4數(shù)組
Java語(yǔ)言中,數(shù)組是一種最簡(jiǎn)單的復(fù)合數(shù)據(jù)類型。數(shù)組的主要特點(diǎn)如下:數(shù)組是相同數(shù)據(jù)類型的元素的集合;數(shù)組中的各元素是有先后順序的,連續(xù)存放在內(nèi)存之中;每個(gè)數(shù)組中的元素用整個(gè)數(shù)組的名字和它在數(shù)組中的位置(稱為下標(biāo))表達(dá)。06二月2023572.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è)元素需要占用存儲(chǔ)空間,因此必須通過(guò)某種方式規(guī)定數(shù)組的大小,進(jìn)而確定數(shù)組需要的空間。給已聲明的數(shù)組分配空間可采用如下格式:
數(shù)組名=new數(shù)組元素類型[數(shù)組元素個(gè)數(shù)]
06二月202358也可以在聲明數(shù)組的同時(shí)給數(shù)組規(guī)定空間,一旦數(shù)組創(chuàng)建以后,數(shù)組就有了固定長(zhǎng)度的結(jié)構(gòu),數(shù)組中各元素通過(guò)下標(biāo)來(lái)區(qū)分,下標(biāo)從0開(kāi)始,下標(biāo)最大值為數(shù)組元素的個(gè)數(shù)減1。當(dāng)數(shù)組的元素類型為基本類型時(shí),在創(chuàng)建存儲(chǔ)空間時(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í)會(huì)產(chǎn)生“數(shù)組訪問(wèn)越界異常”。06二月2023592.4.2數(shù)組使用在方法調(diào)用中,數(shù)組也可以作為方法參數(shù)來(lái)傳遞。但要注意數(shù)組是屬于引用類型的參數(shù)傳遞,也就是在方法中對(duì)虛參數(shù)組的操作會(huì)影響實(shí)參數(shù)組。在Java語(yǔ)言應(yīng)用程序的main方法中有一個(gè)字符串?dāng)?shù)組參數(shù),該數(shù)組中存放所有的命令行參數(shù),命令行參數(shù)是給Java語(yǔ)言應(yīng)用程序提供數(shù)據(jù)的手段之一,它跟在命令行運(yùn)行的主類名之后,各參數(shù)之間用空格分隔。使用命令行參數(shù)有利于提高應(yīng)用程序的通用性。如果命令行參數(shù)中有引號(hào),則兩個(gè)引號(hào)之間的字符系列為一個(gè)參數(shù),空格作為參數(shù)的分隔符。如果引號(hào)不匹配,則從最后一個(gè)引號(hào)到行尾的所有字符將作為一個(gè)參數(shù)。06二月2023602.4.2多維數(shù)組Java語(yǔ)言中,多維數(shù)組被看作數(shù)組的數(shù)組,多維數(shù)組的定義是通過(guò)對(duì)一維數(shù)組的嵌套來(lái)實(shí)現(xiàn)的。即用數(shù)組的數(shù)組來(lái)定義多維數(shù)組。多維數(shù)組中最常用的是二維數(shù)組,下面主要以二維數(shù)組為例介紹多維數(shù)組的使用。聲明數(shù)組
二維數(shù)組的聲明與一維數(shù)組類似,如下所示:格式1:數(shù)組元素類型數(shù)組名[][]格式2:數(shù)組元素類型[][]數(shù)組名;06二月202361二維數(shù)組的創(chuàng)建和初始化為二維數(shù)組創(chuàng)建存儲(chǔ)空間有兩種方式:直接為每個(gè)一維數(shù)組分配空間;從最高維開(kāi)始,按照由高到低的順序?yàn)槊恳痪S數(shù)據(jù)分配空間Java語(yǔ)言中,由于把二維數(shù)組看作是數(shù)組的數(shù)組,不要求二維數(shù)組中每一維數(shù)組的大小相同。要獲取數(shù)組的行數(shù),可以通過(guò)如下方式獲得:數(shù)組名.length要獲取數(shù)組的列數(shù)則要先確定行,再通過(guò)如下方式獲取列數(shù):數(shù)組名[行標(biāo)].length在二維數(shù)組創(chuàng)建空間時(shí),如果元素是基本類型,系統(tǒng)將按照默認(rèn)規(guī)則賦初值;如果元素類型為其他引用類型,則其所有元素為未賦初值狀態(tài)(null)。但可以在數(shù)組定義時(shí)同時(shí)進(jìn)行初始化。06二月2023622.5流程控制語(yǔ)句流程控制語(yǔ)句是用來(lái)控制程序中各語(yǔ)句執(zhí)行順序的語(yǔ)句,使程序設(shè)計(jì)中非常關(guān)鍵和基本的部分。流程控制語(yǔ)句可以把單個(gè)的語(yǔ)句組合成有意義的、能完成一定功能的小模塊。最主要的流程控制方式是結(jié)構(gòu)化程序設(shè)計(jì)中規(guī)定的三種基本流程結(jié)構(gòu)。2.5.1結(jié)構(gòu)化程序設(shè)計(jì)的三種基本流程結(jié)構(gòu)化程序設(shè)計(jì)原則是公認(rèn)的面向過(guò)程編程應(yīng)遵循的原則,它使得程序段的邏輯結(jié)構(gòu)清晰、層次分明,有效地改善了局部程序段的可讀性和可靠性,保證了程序質(zhì)量,提高了程序開(kāi)發(fā)的效率。06二月202363結(jié)構(gòu)化程序設(shè)計(jì)的最基本原則是:任何程序都是可以由三種基本流程結(jié)構(gòu)構(gòu)成,即順序結(jié)構(gòu)、分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。06二月202364三種流程結(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)為開(kāi)放式結(jié)構(gòu),執(zhí)行完后立即退出;而循環(huán)結(jié)構(gòu)為封閉式結(jié)構(gòu),只要滿足條件則反復(fù)執(zhí)行結(jié)構(gòu)內(nèi)的語(yǔ)句。三種基本結(jié)構(gòu)可以相互嵌套。06二月2023652.5.2順序結(jié)構(gòu)順序結(jié)構(gòu)是三種結(jié)構(gòu)中最簡(jiǎn)單的一種,即語(yǔ)句按照書(shū)寫(xiě)的順序依次執(zhí)行。從宏觀上來(lái)看,整個(gè)程序就是一個(gè)順序結(jié)構(gòu)。2.5.3選擇結(jié)構(gòu)Java中的分支結(jié)構(gòu)可以由兩種選擇語(yǔ)句來(lái)實(shí)現(xiàn),一個(gè)是實(shí)現(xiàn)雙選擇的if語(yǔ)句,另一個(gè)是實(shí)現(xiàn)多分支的switch開(kāi)關(guān)語(yǔ)句。06二月202366if語(yǔ)句if語(yǔ)句的一般形式是:if(條件表達(dá)式)語(yǔ)句塊;//if分支
else
語(yǔ)句塊;//else分支塊其中條件表達(dá)式用來(lái)選擇判斷程序的流程走向。在程序的實(shí)際執(zhí)行過(guò)程中,如果條件表達(dá)式的取值為真,則執(zhí)行if分支的語(yǔ)句塊,否則執(zhí)行else分支的語(yǔ)句塊。在編寫(xiě)程序時(shí),也可以不書(shū)寫(xiě)else分支,此時(shí)若條件表達(dá)式的取值為假,則繞過(guò)if分支直接執(zhí)行if語(yǔ)句后的其他語(yǔ)句。有時(shí)也會(huì)用到if-else復(fù)合結(jié)構(gòu)。但要注意else字句不能單獨(dú)作為語(yǔ)句使用,它必須和if配對(duì)使用。
06二月202367switch語(yǔ)句switch語(yǔ)句是多分支的開(kāi)關(guān)語(yǔ)句,它的一般格式如下:switch(表達(dá)式){case判斷值1:語(yǔ)句塊1;//分支1case判斷值2:語(yǔ)句塊2;//分支2……case判斷值n:語(yǔ)句塊n;//分支ndefault:語(yǔ)句塊n+1//分支n+1}
switch語(yǔ)句執(zhí)行時(shí),首先計(jì)算表達(dá)式的值,這個(gè)值必須是整型或字符型,同時(shí)應(yīng)與各個(gè)case分支的判斷值的類型相一致。計(jì)算出表達(dá)式的值之后,將它先與第一個(gè)case分支的判斷值相比較。若相同,則程序轉(zhuǎn)入第一個(gè)case分06二月202368支的語(yǔ)句塊;否則,再將表達(dá)式的值與第二個(gè)分支相比較……依此類推。如果表達(dá)式的值與任何一個(gè)case分支都不相同,則轉(zhuǎn)而執(zhí)行最后的default分支;在default分支不存在的情況下,則跳出整個(gè)switch語(yǔ)句。各個(gè)case和default出現(xiàn)的次序不影響執(zhí)行的結(jié)果。
需要注意各個(gè)case后面的常量不能有相同的值。還有各個(gè)語(yǔ)句塊可以有多條語(yǔ)句,不必使用大括號(hào)。switch語(yǔ)句也允許嵌套。還要注意的是,switch語(yǔ)句的每一個(gè)case判斷,都只負(fù)責(zé)指明流程分支的入口點(diǎn),而不負(fù)責(zé)指定分支的出口點(diǎn),分支的出口點(diǎn)需要編程時(shí)用相應(yīng)的跳轉(zhuǎn)語(yǔ)句來(lái)標(biāo)明。06二月2023692.5.4循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)是利用循環(huán)語(yǔ)句來(lái)實(shí)現(xiàn)的。循環(huán)語(yǔ)句是在一定條件下反復(fù)執(zhí)行一段代碼,被反復(fù)執(zhí)行的程序段稱為循環(huán)體。Java語(yǔ)言中提供的循環(huán)語(yǔ)句有三種:while語(yǔ)句、do-while語(yǔ)句、for語(yǔ)句。
06二月202370while語(yǔ)句while語(yǔ)句的一般形式是:
while(條件表達(dá)式)
循環(huán)體while語(yǔ)句的執(zhí)行時(shí),首先檢查表達(dá)式的值是否為真,若為真,則執(zhí)行循環(huán)體,然后繼續(xù)判斷是否繼續(xù)循環(huán),直到表達(dá)式的值為假,直到表達(dá)式的值為假,執(zhí)行后續(xù)語(yǔ)句。循環(huán)體通常是一個(gè)組合語(yǔ)句,也可以是單個(gè)語(yǔ)句。
while循環(huán)的特點(diǎn)是“先判斷,后執(zhí)行”。如果條件已開(kāi)始就不滿足,則循環(huán)執(zhí)行為0次。另外,在循環(huán)體中通常通過(guò)執(zhí)行某個(gè)操作來(lái)改變循環(huán)條件,如果循環(huán)條件不改變,則循環(huán)會(huì)陷入死循環(huán)中。在程序設(shè)計(jì)中要避免死循環(huán)。06二月202371do-while語(yǔ)句如果需要在任何情況下都先執(zhí)行一遍循環(huán)體,則可以采用do-while循環(huán),它的格式如下:do{
循環(huán)體}while(條件表達(dá)式)do-while循環(huán)的特點(diǎn)是:“先執(zhí)行,后判斷”,在執(zhí)行時(shí),先執(zhí)行循環(huán)體的語(yǔ)句,在檢查表達(dá)式,若表達(dá)式的值為真,則繼續(xù)執(zhí)行循環(huán)體,否則,結(jié)束循環(huán),執(zhí)行后續(xù)語(yǔ)句。與while循環(huán)相比,循環(huán)體至少要執(zhí)行一次。06二月202372for語(yǔ)句
for語(yǔ)句一般用于事先能夠確定循環(huán)次數(shù)的場(chǎng)合,其格式為:
for(控制變量設(shè)定初值;循環(huán)條件;迭代部分)循環(huán)體for語(yǔ)句執(zhí)行時(shí),首先執(zhí)行初始化操作,然后判斷終止條件是否滿足,如果滿足,則執(zhí)行循環(huán)體中的語(yǔ)句,最后通過(guò)執(zhí)行迭代部分給控制變量增值。完成一次循環(huán)后,重新判斷終止條件。使用for循環(huán)要注意一下幾點(diǎn):初始化、終止條件以及迭代部分都可以為空(但分號(hào)不能少),三者均為空時(shí),相當(dāng)于一個(gè)無(wú)限循環(huán)。在初始化部分和迭代部分可以使用逗號(hào)表達(dá)式,來(lái)進(jìn)行多個(gè)操作。06二月2023732.5.5跳轉(zhuǎn)語(yǔ)句循環(huán)嵌套三種循環(huán)語(yǔ)句可以自身嵌套,也可以相互嵌套。嵌套將循環(huán)分為內(nèi)外兩層,外層循環(huán)每循環(huán)一次,內(nèi)層循環(huán)要執(zhí)行一圈。注意編寫(xiě)嵌套循環(huán)時(shí),不能出現(xiàn)內(nèi)外循環(huán)的結(jié)構(gòu)交叉現(xiàn)象。break語(yǔ)句在switch語(yǔ)句中,break語(yǔ)句已經(jīng)得到應(yīng)用。在各類循環(huán)語(yǔ)句中,break語(yǔ)句也提供了一種方便的跳出循環(huán)的方法。它有兩種使用形式:
06二月202374
break//不帶標(biāo)號(hào),從break直接所在處的循環(huán)體中跳轉(zhuǎn)出來(lái)
break標(biāo)號(hào)名
//帶標(biāo)號(hào),跳出標(biāo)號(hào)所指的代碼塊,執(zhí)行塊后的下一條語(yǔ)句給代碼塊加標(biāo)號(hào)的格式如下:BlockLabel:{codeBlock}continue語(yǔ)句continue語(yǔ)句用來(lái)結(jié)束本次循環(huán),跳過(guò)循環(huán)體中下面尚未執(zhí)行的語(yǔ)句,接著進(jìn)行終止條件的判斷,以決定是否繼續(xù)循環(huán)。對(duì)于for語(yǔ)句,在進(jìn)行終止條件的判斷前,還要先執(zhí)行迭代語(yǔ)句。它有兩種形式:continue//不帶標(biāo)號(hào),終止當(dāng)前一輪的循環(huán),繼續(xù)下一輪循環(huán)continue標(biāo)號(hào)
//帶標(biāo)號(hào),跳轉(zhuǎn)到標(biāo)號(hào)所指示的外層循環(huán)中06二月2023752.6本章小結(jié)本章是Java語(yǔ)言程序設(shè)計(jì)的基礎(chǔ),該章主要是對(duì)程序的組成元素和邏輯進(jìn)行介紹。Java語(yǔ)言中的數(shù)據(jù)類型有簡(jiǎn)單數(shù)據(jù)類型和復(fù)合數(shù)據(jù)類型兩種,其中簡(jiǎn)單數(shù)據(jù)類型包括整數(shù)類型、浮點(diǎn)數(shù)類型、字符類型和布爾類型;復(fù)合數(shù)據(jù)類型包括類、接口和數(shù)組。表達(dá)式是由運(yùn)算符和操作數(shù)組成的符號(hào)序列,對(duì)一個(gè)表達(dá)式進(jìn)行運(yùn)算時(shí),要按照運(yùn)算符的優(yōu)先順序從高到低進(jìn)行,同級(jí)的運(yùn)算符則按照結(jié)合性決定運(yùn)算次序。06二月202376
數(shù)組是具有相同類型元素的有序集合,數(shù)組的創(chuàng)建分為定義、分配內(nèi)存以及初始化等階段。通過(guò)下標(biāo)變量訪問(wèn)數(shù)組中的元素。經(jīng)常用循環(huán)語(yǔ)句來(lái)控制對(duì)數(shù)組元素的訪問(wèn),但要注意訪問(wèn)不要越界。條件語(yǔ)句、循環(huán)語(yǔ)句和跳轉(zhuǎn)語(yǔ)句是Java語(yǔ)言中常用的控制語(yǔ)句。對(duì)這些語(yǔ)句的正確理解和運(yùn)用非常重要。程序設(shè)計(jì)的關(guān)鍵是要將算法思路轉(zhuǎn)化為可實(shí)現(xiàn)的語(yǔ)句。第三章類和對(duì)象
06二月202378學(xué)習(xí)目的:了解面向?qū)ο蠡靖拍?/p>
掌握類的創(chuàng)建和使用
掌握對(duì)象的創(chuàng)建與使用了解參數(shù)的傳遞
了解匿名對(duì)象
學(xué)習(xí)重點(diǎn):掌握類的創(chuàng)建和使用
掌握對(duì)象的創(chuàng)建與使用06二月202379第三章類和對(duì)象
本章提要:面向?qū)ο蠡靖拍铑惖膭?chuàng)建和使用對(duì)象的創(chuàng)建與使用參數(shù)的傳遞匿名對(duì)象
06二月2023803.1面向?qū)ο蟮某绦蛟O(shè)計(jì)方法概述
3.1.1抽象
抽象是人們解決問(wèn)題的主要手段,也是面向?qū)ο蟪绦蛟O(shè)計(jì)解決實(shí)際問(wèn)題法寶之一。所謂抽象就是指從眾多的事物面向?qū)ο蟪绦蛟O(shè)計(jì)標(biāo)志著程序設(shè)計(jì)思想發(fā)展到一個(gè)新的高度,它用一種更符合人們認(rèn)識(shí)客觀世界的思維方式進(jìn)行程序設(shè)計(jì):相對(duì)于面向過(guò)程的程序設(shè)計(jì)以研究問(wèn)題的解決過(guò)程為主體,面向?qū)ο缶幊淌且詫?duì)象為主體,使編程富于創(chuàng)造性,提高了程序的可重用性,簡(jiǎn)化了編程過(guò)程,同時(shí)也使程序更易于維護(hù)。06二月202381中舍棄個(gè)別的、非本質(zhì)的屬性,抽出共同的、本質(zhì)的屬性的過(guò)程。是面向?qū)ο蟪绦蛟O(shè)計(jì)的核心概念。用面向?qū)ο缶幊探鉀Q現(xiàn)實(shí)世界的問(wèn)題時(shí),首先是利用抽象技術(shù)將現(xiàn)實(shí)世界中的各種實(shí)體,歸納總結(jié)出共性的東西形成一類實(shí)體的基本特征。這些特征包括屬性和行為,這些本質(zhì)屬性和方法的有機(jī)組合,就是面向?qū)ο蠓椒ㄖ械念悺?.1.2封裝
封裝性是面向?qū)ο缶幊痰幕咎匦灾?,它通過(guò)封裝隱蔽了對(duì)象的內(nèi)部實(shí)現(xiàn)細(xì)節(jié)。對(duì)象的封裝有兩個(gè)方面:06二月202382一方面表示對(duì)象的屬性和方法是不可分割的整體。對(duì)象的屬性和方法封裝為一體具有重要的意義,因?yàn)樗从沉藢?duì)象同時(shí)具有了客觀事物的靜態(tài)特征和動(dòng)態(tài)行為相統(tǒng)一的客觀規(guī)律,使軟件對(duì)客觀事物的描述更接近人類表述;而過(guò)去的面向過(guò)程的編程語(yǔ)言都是將功能和數(shù)據(jù)相分離,使軟件對(duì)客觀事物的描述存在偏差,很難自然地用語(yǔ)言表達(dá)客觀事物的對(duì)應(yīng)關(guān)系。另一方面,封裝還表示對(duì)象內(nèi)部細(xì)節(jié)的隱蔽性。對(duì)內(nèi)部細(xì)節(jié)的隱蔽性反映了事物客觀的相對(duì)獨(dú)立性,這樣既可以防止外界的干擾,又可以降低復(fù)雜性。在java語(yǔ)言中,對(duì)象、類和包逐層封裝,為管理大量的對(duì)象和類提供了方便,也增強(qiáng)了語(yǔ)言的安全性。隱藏了內(nèi)部細(xì)節(jié)也使得java的使用者和設(shè)計(jì)者分離,使用者只需用接口去滿足軟件重用的策略,可以降低軟件開(kāi)發(fā)成本,縮短開(kāi)發(fā)周期,是軟件的開(kāi)發(fā)和維護(hù)得到根本性的改善。06二月202383訪問(wèn)對(duì)象,而不必知道對(duì)象的內(nèi)部細(xì)節(jié)。從軟件工程的角度講,封裝也符合模塊化設(shè)計(jì)原則,滿足軟件重用的策略,可以降低軟件開(kāi)發(fā)成本,縮短開(kāi)發(fā)周期,是軟件的開(kāi)發(fā)和維護(hù)得到根本性的改善。
3.1.3
繼承面向?qū)ο蟪绦蛟O(shè)計(jì)的另一重要特點(diǎn)是類的繼承性。繼承是讓一個(gè)類成為另一個(gè)類的子類,子類繼承父類的所有特性,并可以擴(kuò)充自己的特性。這種關(guān)系為共享數(shù)據(jù)和操作提供了一種良好的機(jī)制。繼承提高了軟件的重用性、可用性和界面的一致性。根據(jù)繼承的特性,可以將繼承分為如下兩種主要形式:06二月202384(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語(yǔ)言只支持單繼承,而不支持多繼承。
3.1.4
多態(tài)多態(tài)性也是面向?qū)ο缶幊痰囊粋€(gè)特性,它反映了現(xiàn)實(shí)世界中謀類事物中的每個(gè)實(shí)體,都具有一些不同于其它實(shí)體的某些方面,也是針對(duì)于類中有相似功能的06二月202385不同方法以同一方法名來(lái)定義。這樣,可以用相同的方式調(diào)用不同的同名方法。Java中通過(guò)方法的重寫(xiě)和方法重載類實(shí)現(xiàn)多態(tài)。3.2類
類是組成java程序的基本要素,也是java程序設(shè)計(jì)的重要思想表現(xiàn)。作為程序的基本要素,類封裝了某個(gè)對(duì)象范疇的狀態(tài)和方法,可以看作定義對(duì)象的模板。3.2.1類聲明類聲明的最一般格式為:[類修飾符]class類名[extends父類名][implements[,接口名]06二月202386{…//類體}其中,[]中的元素表示可選項(xiàng)。大括號(hào)對(duì)“{}”及之間的內(nèi)容為類體。類修飾符表示類的性質(zhì),主要是對(duì)于訪問(wèn)權(quán)限的限定。類的修飾符主要有:
l
Public公共類修飾符。表示可以被相同包中的類繼承或訪問(wèn),而不同包中的類也可以通過(guò)import引用后再繼承或訪問(wèn)。l
Final終結(jié)類修飾符。這將在第五章介紹。l
Abstract抽象類修飾符。它沒(méi)有方法的實(shí)現(xiàn),也沒(méi)有構(gòu)造方法。不能用new運(yùn)算符實(shí)例化。不能被繼承。也將在第五章進(jìn)行詳細(xì)介紹。06二月202387class表示類聲明的開(kāi)始,class為關(guān)鍵字,用來(lái)定義類?!癱lass類名”部分用來(lái)聲明類。類名必須符合java對(duì)標(biāo)識(shí)符的命名標(biāo)準(zhǔn),如果類名使用拉丁字母,習(xí)慣上首字母使用大寫(xiě);類名為容易識(shí)別的關(guān)系可用多個(gè)單詞復(fù)合而成,此時(shí)習(xí)慣每個(gè)單詞首字母大寫(xiě)。關(guān)鍵字extends表示類繼承了某個(gè)父類,父類名必須是java標(biāo)準(zhǔn)類名或程序本身已定義過(guò)的類名。關(guān)鍵字implements表示繼承某個(gè)接口,若有多個(gè)接口則接口間用逗號(hào)隔開(kāi)。3.2.2類體
類是創(chuàng)建對(duì)象的模板,因此它應(yīng)該能夠描述一類事物共有的屬性和功能,這個(gè)描述過(guò)程由類體實(shí)現(xiàn)。類聲明之后的一對(duì)大括號(hào)“{”、“}”以及它們之間的內(nèi)容稱06二月202388做類體,大括號(hào)之間的內(nèi)容稱做類體的內(nèi)容。類體的內(nèi)容由兩部分構(gòu)成:一部分是變量的定義,用來(lái)刻畫(huà)事物的屬性;另一部分是方法的定義,用來(lái)描述事物的功能。例子3.1:定義一個(gè)People類,類體內(nèi)容的變量定義部分定義了1個(gè)double類型變量“身高”、1個(gè)布爾類型變量“性別”、兩個(gè)個(gè)字符串類型變量“姓名”和“職業(yè)”,和一個(gè)方法“人物簡(jiǎn)介”。classPeople{double身高;//定義變量部分
booblean性別=true;//定義變量時(shí)可以同時(shí)進(jìn)行賦值
String姓名,職業(yè);
publicvoid人物間介()//方法定義
{
System.out.println(“個(gè)人基本資料:”+姓名+性別+身高+職業(yè));}}06二月202389當(dāng)然,上述類的定義還可以有別的屬性,如“婚否”等,也可以有別的方法,如“業(yè)余愛(ài)好”等。特別注意的是:在變量定義部分可以將變量定義部分可以和變量的賦值同時(shí)進(jìn)行,但不可以如下這樣做:classPeople{double身高;//定義變量部分
booblean性別;//定義變量和賦值分開(kāi)進(jìn)行
性別=true;
…因?yàn)?,加下?huà)線的語(yǔ)句屬于對(duì)變量操作語(yǔ)句,而不是定義語(yǔ)句。所有變量的操作語(yǔ)句只能放在方法種進(jìn)行。06二月2023903.2.4類的變量上一節(jié)提到類體分為變量定義和方法兩部分。變量除了在類體變量定義部分進(jìn)行定義外,還可以在方法內(nèi)部定義;另外,成員變量又可以分為靜態(tài)變量和實(shí)例變量。1)成員變量的定義格式[修飾符]變量類型變量名=初值;其中,變量名應(yīng)為合法的標(biāo)識(shí)符,盡量做到見(jiàn)名知意;變量類型通常指變量的基本數(shù)據(jù)類型。其中變量類型和變量名兩項(xiàng)不可以省略。有時(shí)候某些類的實(shí)例也會(huì)作為類的成員變量,對(duì)象成員的定義格式如下:類名對(duì)象名=new類名([參數(shù)表]);大家可以類比一下普通變量和對(duì)象定義的關(guān)系。06二月202391
1)變量的修飾符變量的修飾符有進(jìn)行訪問(wèn)控制的修飾符和非訪問(wèn)控制的修飾符兩種,主要的訪問(wèn)控制修飾符有public、protected等,這些修飾符主要在繼承等訪問(wèn)時(shí)進(jìn)行訪問(wèn)權(quán)限的控制,將在第五章進(jìn)行詳細(xì)介紹;非訪問(wèn)控制符主要有static、final等,將在后面單獨(dú)介紹。2)成員變量和局部變量變量按照定義的位置,可以分為成員變量和局部變量。變量定義部分定義的變量稱為類的成員變量,成員變量在整個(gè)方法內(nèi)有效,且和它在類體中書(shū)寫(xiě)的順序無(wú)關(guān);在方法內(nèi)部定義的變量或方法的參數(shù)稱為局部變量,局部變量只在定義它的方法內(nèi)有效。例3.2:在例3.1的基礎(chǔ)上增加一些變量及方法。06二月202392classPeople{double身高;//全局變量
booblean性別=true;String姓名,職業(yè);
publicvoid人物間介() //方法定義{age=30; //合法,因?yàn)閍ge為全局變量,切合定義位置無(wú)關(guān)String愛(ài)好=“圍棋”; //局部變量
System.out.println(“個(gè)人基本資料:”+姓名+年齡+性別+身高+職業(yè)+愛(ài)好); }
intage;publicvoidspeak(Strings){System.out.println(“我的娛樂(lè)是”+愛(ài)好);//非法,變量愛(ài)好是局部變量}}在變量定義過(guò)程中,有時(shí)會(huì)出現(xiàn)成員變量和局部變量同名的情況,此時(shí),在出現(xiàn)局部變量的方法中,同名的成員變量會(huì)被隱藏,即這個(gè)成員變量會(huì)在這個(gè)方法內(nèi)暫時(shí)失效。06二月202393如:classTest{inta=30;publicstaticvoidmian(args[]) {inta=60;System.out.println(“a=”+a);}}程序輸出結(jié)果為a=60,因?yàn)槿肿兞縜對(duì)于main方法來(lái)說(shuō),已經(jīng)失效。但有的時(shí)候還需要在出現(xiàn)上述情況的方法中還使用全局變量,就必須使用關(guān)鍵字this。特別是希望某些方法得到的參數(shù)作為全局變量來(lái)用時(shí),如下例所示。例3.3:編寫(xiě)一個(gè)類,能夠根據(jù)一個(gè)方法的參數(shù)來(lái)修改全局變量a。classTest{
06二月202394staticStringa=“全局變量”;
publicString修改字符串(Stringa) {Stringa;this.a=a;//方法中的參數(shù)和全局變量同一化
System.out.println(“a=”+a);}}
1)靜態(tài)成員變量(類成員變量或類變量)與實(shí)例成員變量(實(shí)例變量)如果成員變量的類型關(guān)鍵字前面有關(guān)鍵字static,這樣的成員變量稱作類變量或靜態(tài)成員變量。如:classdog{floatx;//實(shí)例成員變量
staticinty;//類變量…}06二月202395如果一個(gè)類中的某個(gè)成員變量是類變量,那么所有類的實(shí)例對(duì)象的這個(gè)類變量都分配給同一處的內(nèi)存,修改了其中一個(gè)對(duì)象的這個(gè)類變量,其他類的這個(gè)類變量也會(huì)隨之改變。也就是說(shuō),類變量被所有對(duì)象共享。3.2.3構(gòu)造方法
根據(jù)類創(chuàng)建對(duì)象時(shí),總是使用一個(gè)特殊的方法來(lái)初始化對(duì)象,這個(gè)方法稱為構(gòu)造方法。構(gòu)造方法的名字要求與類同名(包括大小寫(xiě)),且無(wú)返回值。在創(chuàng)建對(duì)象時(shí),java語(yǔ)言都會(huì)自動(dòng)調(diào)用構(gòu)造方法為新對(duì)象進(jìn)行初始化。一個(gè)類可以創(chuàng)建多個(gè)構(gòu)造方法,但必須具有不同的參數(shù),也就是說(shuō),構(gòu)造方法可以重載。利用不同參數(shù)調(diào)用不同的構(gòu)造方法,可以實(shí)現(xiàn)對(duì)象的不同初始化。例3.4:還是people類的定義:06二月202396classPeople{Stringname,career;booleansex;//true代表女,false代表男
intage;doubleheight;//從姓名、年齡角度分析people類時(shí)使用
publicPeople(Stringname,intage) { =name; this.age=age;System.out.println(“姓名:”+name+“\n”+“年齡:”+age); }//從性別、職業(yè)角度分析people類時(shí)使用publicPeople(Stringcareer,booleansex) { this.career=career; this.sex=sex;System.out.println(“性別:”+sex+“\n”+“年齡:”+age); } publicPeople()//如果有前面定義的構(gòu)造方法,最好也定義此構(gòu)造方法: { }}06二月202397使用構(gòu)造方法進(jìn)行初始化的好處是避免了在生成對(duì)象后每次都調(diào)用對(duì)象的初始化方法,構(gòu)造方法內(nèi)部成員遵循前面局部變量的使用規(guī)則??偨Y(jié)構(gòu)造方法有以下特點(diǎn):l
構(gòu)造方法名與類名必須大小寫(xiě)及拼寫(xiě)完全一致。l
構(gòu)造方法用于對(duì)象初始化,不需返回值,但是不必用void說(shuō)明。l
構(gòu)造方法不能被程序調(diào)用,只能通過(guò)new運(yùn)算符調(diào)用。l
構(gòu)造方法可由編程人員在類中定義,當(dāng)用戶沒(méi)有定義時(shí),java語(yǔ)言會(huì)自動(dòng)生成一個(gè)為空的構(gòu)造方法,當(dāng)用new調(diào)用默認(rèn)的構(gòu)造方法時(shí),對(duì)象被初始化為內(nèi)部各數(shù)據(jù)相應(yīng)數(shù)據(jù)類型的默認(rèn)值;但是當(dāng)用戶定義有構(gòu)造方法時(shí),默認(rèn)的構(gòu)造方法會(huì)失效,如果還要用的話,最好把默認(rèn)的構(gòu)造方法顯式地定義出來(lái)。06二月202398構(gòu)造方法對(duì)于創(chuàng)建對(duì)象非常關(guān)鍵。雖然在大多數(shù)情況下,類的對(duì)象都是調(diào)用有參數(shù)的構(gòu)造方法,方便對(duì)象變量的初始化。
同時(shí),類定義時(shí)如果沒(méi)有聲明任何構(gòu)造方法,系統(tǒng)會(huì)賦給此來(lái)一個(gè)默認(rèn)(無(wú)參)的構(gòu)造方法。但是,一旦用戶在類中聲明了構(gòu)造方法(有參),系統(tǒng)將不會(huì)再賦給這個(gè)類默認(rèn)的構(gòu)造方法了。所以,好的習(xí)慣是:要么不聲明構(gòu)造方法,要么聲明兩個(gè)以上構(gòu)造方法,兩個(gè)中包括一個(gè)無(wú)參數(shù)的構(gòu)造方法。3.2.5終結(jié)函數(shù)終結(jié)方法:finalize(),該方法包含在java.Long.Object類中。java語(yǔ)言自動(dòng)管理內(nèi)存,可以自動(dòng)進(jìn)行垃圾收集,在收集前自動(dòng)調(diào)用對(duì)象的finalize()方法來(lái)釋放系統(tǒng)資源。finalize方法06二月202399很相似c++中的析構(gòu)函數(shù)。但由于java有垃圾回收機(jī)制,并且java垃圾回收器的使用不由程序員控制,也無(wú)規(guī)律可循,有可能在程序終止時(shí)都沒(méi)有啟動(dòng)的機(jī)會(huì)。因此,這樣的資源回收并不是可靠的方法。這種垃圾回收器的不確定性,有時(shí)會(huì)給程序運(yùn)行帶來(lái)麻煩,比如說(shuō)在某段時(shí)間系統(tǒng)產(chǎn)生了大量的待釋放資源卻無(wú)法有效釋放。為了解決這種麻煩,java里提供了System.gc()方法,使用這個(gè)方法,可以強(qiáng)制啟動(dòng)垃圾回收器,進(jìn)而自動(dòng)執(zhí)行finalize()方法。例3.5:一個(gè)finalize的一個(gè)典型應(yīng)用示例。classPerson{ publicvoidfinalize() { System.out.println("theobjectisgone!"); }
06二月2023100publicstaticvoidmain(String[]args) { newPerson(); newPerson(); newPerson();System.gc(); System.out.println("theprogramisending!"); }}運(yùn)行結(jié)果如圖3-1。
圖3-1對(duì)象的釋放
3.2.6類方法和實(shí)例方法06二月2023101正如成員變量分為類變量和實(shí)例變量一樣,類的方法也分為類方法和實(shí)例方法。如:classdog{floatx()//實(shí)例方法{…return…}staticinty();//類方法{…
return…}}若一個(gè)方法被聲明為類方法,則它只能對(duì)類變量進(jìn)行操作,且象類變量一樣,類的所有實(shí)例對(duì)象共享同一個(gè)類方法。如:06二月2023102classtest{inta=3;staticintb;floatf(intx,inty){a=x;b=y;//變量引用合法,因?yàn)閒為實(shí)例方法returnx*y;}staticfloatg(intx,inty){a=x;b=2*a;//變量a引用不合法,因?yàn)間為類方法,而a為實(shí)例變量returnx*y;}}3.3
對(duì)象的創(chuàng)建和使用知道類是創(chuàng)建對(duì)象的模板。當(dāng)用一個(gè)類創(chuàng)建了一個(gè)對(duì)象時(shí),意味著一類事物中具體的某個(gè)客觀實(shí)體被程序表述了。在面相對(duì)對(duì)象的程序中,對(duì)象是由屬性和方法封裝而成,屬性是實(shí)體的一些特征值或構(gòu)件,方法是實(shí)體的功能和行為。06二月2023103對(duì)象可以被看作復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。一個(gè)對(duì)象的生命周期分為三個(gè)階段:生成、使用和清除。3.3.1創(chuàng)建對(duì)象創(chuàng)建一個(gè)對(duì)象包括兩個(gè)步驟:聲明對(duì)象和為對(duì)象分配內(nèi)存。1)對(duì)象的聲明一般格式為:類名對(duì)象名如:People張三這里people是前面定義的一個(gè)類的名字,張三是聲明對(duì)象的名字。但此時(shí)對(duì)象“張三”的內(nèi)存中沒(méi)有任何數(shù)據(jù),即“張三”還是一個(gè)空對(duì)象,不能使用。要是用這個(gè)對(duì)象還必須為這個(gè)對(duì)象分配內(nèi)存,也叫做為對(duì)象分配實(shí)體。06二月2023104
1)為對(duì)象分配內(nèi)存為對(duì)象分配內(nèi)存,即使用new運(yùn)算符和類的構(gòu)造方法實(shí)例化某個(gè)對(duì)象。如果類中沒(méi)有構(gòu)造方法,系統(tǒng)會(huì)自動(dòng)調(diào)用默認(rèn)的構(gòu)造方法(沒(méi)有參數(shù),名字遵循普通構(gòu)造方法的要
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 投資入股電站合同范例
- 承包輪胎煉油合同范例
- 農(nóng)場(chǎng)收購(gòu)合同范例
- 外包保安合同范例
- 關(guān)于增補(bǔ)保安合同范例
- 復(fù)墾合同范例
- 正規(guī)代銷(xiāo)合同范例
- 商場(chǎng)裝潢合同范例
- 最強(qiáng)合同范例
- 電影制作合同范例
- 酒店投資概算表(模板)精華
- GB/T 36393-2018土壤質(zhì)量自然、近自然及耕作土壤調(diào)查程序指南
- GB/T 1412-2005球墨鑄鐵用生鐵
- 新疆維吾爾自治區(qū)公共建筑節(jié)能設(shè)計(jì)標(biāo)準(zhǔn)實(shí)施細(xì)則2023
- 2022年西藏自治區(qū)中考英語(yǔ)真題卷(含答案與解析)
- RCS-9626CN電動(dòng)機(jī)保護(hù)測(cè)控裝置
- 年終總結(jié)運(yùn)維報(bào)告課件
- 體育教學(xué)與信息技術(shù)
- 公司力量觀后感
- 《國(guó)際法》形成性考核參考資料廣東開(kāi)放大學(xué)2022年10月題庫(kù)
- 純電動(dòng)汽車(chē)整車(chē)控制器(VCU)策略 PPT
評(píng)論
0/150
提交評(píng)論