Java類(lèi)與對(duì)象詳解課件_第1頁(yè)
Java類(lèi)與對(duì)象詳解課件_第2頁(yè)
Java類(lèi)與對(duì)象詳解課件_第3頁(yè)
Java類(lèi)與對(duì)象詳解課件_第4頁(yè)
Java類(lèi)與對(duì)象詳解課件_第5頁(yè)
已閱讀5頁(yè),還剩81頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

Java類(lèi)與對(duì)象詳解Java類(lèi)與對(duì)象詳解1Java類(lèi)的定義及其實(shí)例化類(lèi)必須先定義才能使用。類(lèi)是創(chuàng)建對(duì)象的模板,創(chuàng)建對(duì)象也叫類(lèi)的實(shí)例化。Java類(lèi)的定義及其實(shí)例化類(lèi)必須先定義才能使用。類(lèi)是創(chuàng)建對(duì)象2Java類(lèi)與對(duì)象詳解課件3示例說(shuō)明public是類(lèi)的修飾符,表明該類(lèi)是公共類(lèi),可以被其他類(lèi)訪問(wèn)。class是定義類(lèi)的關(guān)鍵字。Dog是類(lèi)名稱(chēng)。name、age

是類(lèi)的成員變量,也叫屬性;bark()、hungry()

是類(lèi)中的函數(shù),也叫方法。一個(gè)類(lèi)可以包含以下類(lèi)型變量:局部變量:在方法或者語(yǔ)句塊中定義的變量被稱(chēng)為局部變量。變量聲明和初始化都是在方法中,方法結(jié)束后,變量就會(huì)自動(dòng)銷(xiāo)毀。成員變量:成員變量是定義在類(lèi)中、方法體之外的變量。這種變量在創(chuàng)建對(duì)象的時(shí)候?qū)嵗ǚ峙鋬?nèi)存)。成員變量可以被類(lèi)中的方法和特定類(lèi)的語(yǔ)句訪問(wèn)。類(lèi)變量:類(lèi)變量也聲明在類(lèi)中,方法體之外,但必須聲明為static類(lèi)型。static也是修飾符的一種示例說(shuō)明public是類(lèi)的修飾符,表明該類(lèi)是公共類(lèi),可以被4構(gòu)造方法在類(lèi)實(shí)例化的過(guò)程中自動(dòng)執(zhí)行的方法叫做構(gòu)造方法,它不需要你手動(dòng)調(diào)用。構(gòu)造方法可以在類(lèi)實(shí)例化的過(guò)程中做一些初始化的工作。

構(gòu)造方法的名稱(chēng)必須與類(lèi)的名稱(chēng)相同,并且沒(méi)有返回值。

每個(gè)類(lèi)都有構(gòu)造方法。如果沒(méi)有顯式地為類(lèi)定義構(gòu)造方法,Java編譯器將會(huì)為該類(lèi)提供一個(gè)默認(rèn)的構(gòu)造方法。構(gòu)造方法在類(lèi)實(shí)例化的過(guò)程中自動(dòng)執(zhí)行的方法叫做構(gòu)造方法,它不需5Java類(lèi)與對(duì)象詳解課件6創(chuàng)建對(duì)象對(duì)象是類(lèi)的一個(gè)實(shí)例,創(chuàng)建對(duì)象的過(guò)程也叫類(lèi)的實(shí)例化。對(duì)象是以類(lèi)為模板來(lái)創(chuàng)建的。

在Java中,使用new關(guān)鍵字來(lái)創(chuàng)建對(duì)象,一般有以下三個(gè)步驟:聲明:聲明一個(gè)對(duì)象,包括對(duì)象名稱(chēng)和對(duì)象類(lèi)型。實(shí)例化:使用關(guān)鍵字new來(lái)創(chuàng)建一個(gè)對(duì)象。初始化:使用new創(chuàng)建對(duì)象時(shí),會(huì)調(diào)用構(gòu)造方法初始化對(duì)象。創(chuàng)建對(duì)象對(duì)象是類(lèi)的一個(gè)實(shí)例,創(chuàng)建對(duì)象的過(guò)程也叫類(lèi)的實(shí)例化。對(duì)7訪問(wèn)成員變量和方法訪問(wèn)成員變量和方法8Java訪問(wèn)修飾符(訪問(wèn)控制符)Java通過(guò)修飾符來(lái)控制類(lèi)、屬性和方法的訪問(wèn)權(quán)限和其他功能,通常放在語(yǔ)句的最前端。Java的修飾符很多,分為訪問(wèn)修飾符和非訪問(wèn)修飾符。訪問(wèn)修飾符也叫訪問(wèn)控制符,是指能夠控制類(lèi)、成員變量、方法的使用權(quán)限的關(guān)鍵字。

在面向?qū)ο缶幊讨?,訪問(wèn)控制符是一個(gè)很重要的概念,可以使用它來(lái)保護(hù)對(duì)類(lèi)、變量、方法和構(gòu)造方法的訪問(wèn)。

Java訪問(wèn)修飾符(訪問(wèn)控制符)Java通過(guò)修飾符來(lái)控制類(lèi)9Java類(lèi)與對(duì)象詳解課件10public:公有的被聲明為public的類(lèi)、方法、構(gòu)造方法和接口能夠被任何其他類(lèi)訪問(wèn)。

如果幾個(gè)相互訪問(wèn)的public類(lèi)分布在不用的包中,則需要導(dǎo)入相應(yīng)public類(lèi)所在的包。由于類(lèi)的繼承性,類(lèi)所有的公有方法和變量都能被其子類(lèi)繼承。Java程序的main()方法必須設(shè)置成公有的,否則,Java解釋器將不能運(yùn)行該類(lèi)。public:公有的被聲明為public的類(lèi)、方法、構(gòu)造方法11protected:受保護(hù)的被聲明為protected的變量、方法和構(gòu)造方法能被同一個(gè)包中的任何其他類(lèi)訪問(wèn),也能夠被不同包中的子類(lèi)訪問(wèn)。

protected訪問(wèn)修飾符不能修飾類(lèi)和接口,方法和成員變量能夠聲明為protected,但是接口的成員變量和成員方法不能聲明為protected。

子類(lèi)能訪問(wèn)protected修飾符聲明的方法和變量,這樣就能保護(hù)不相關(guān)的類(lèi)使用這些方法和變量。protected:受保護(hù)的被聲明為protected的變量12private:私有的私有訪問(wèn)修飾符是最嚴(yán)格的訪問(wèn)級(jí)別,所以被聲明為private的方法、變量和構(gòu)造方法只能被所屬類(lèi)訪問(wèn),并且類(lèi)和接口不能聲明為private。

聲明為私有訪問(wèn)類(lèi)型的變量只能通過(guò)類(lèi)中公共的Getter/Setter方法被外部類(lèi)訪問(wèn)。

private訪問(wèn)修飾符的使用主要用來(lái)隱藏類(lèi)的實(shí)現(xiàn)細(xì)節(jié)和保護(hù)類(lèi)的數(shù)據(jù)。private:私有的私有訪問(wèn)修飾符是最嚴(yán)格的訪問(wèn)級(jí)別,所以13在類(lèi)中定義訪問(wèn)私有變量的方法,習(xí)慣上是這樣命名的:在變量名稱(chēng)前面加“get”或“set”,并將變量的首字母大寫(xiě)。例如,獲取私有變量name的方法為getName(),設(shè)置name的方法為setName()。這些方法經(jīng)常使用,也有了特定的稱(chēng)呼,稱(chēng)為Getter和Setter方法。在類(lèi)中定義訪問(wèn)私有變量的方法,習(xí)慣上是這樣命名的:在變量名稱(chēng)14默認(rèn)的:不使用任何關(guān)鍵字不使用任何修飾符聲明的屬性和方法,對(duì)同一個(gè)包內(nèi)的類(lèi)是可見(jiàn)的。接口里的變量都隱式聲明為publicstaticfinal,而接口里的方法默認(rèn)情況下訪問(wèn)權(quán)限為public。默認(rèn)的:不使用任何關(guān)鍵字不使用任何修飾符聲明的屬性和方法,對(duì)15訪問(wèn)控制和繼承父類(lèi)中聲明為public的方法在子類(lèi)中也必須為public。父類(lèi)中聲明為protected的方法在子類(lèi)中要么聲明為protected,要么聲明為public。不能聲明為private。父類(lèi)中默認(rèn)修飾符聲明的方法,能夠在子類(lèi)中聲明為private。父類(lèi)中聲明為private的方法,不能夠被繼承。訪問(wèn)控制和繼承父類(lèi)中聲明為public的方法在子類(lèi)中也必須為16如何使用訪問(wèn)控制符訪問(wèn)控制符可以讓我們很方便的控制代碼的權(quán)限:

當(dāng)需要讓自己編寫(xiě)的類(lèi)被所有的其他類(lèi)訪問(wèn)時(shí),就可以將類(lèi)的訪問(wèn)控制符聲明為public。當(dāng)需要讓自己的類(lèi)只能被自己的包中的類(lèi)訪問(wèn)時(shí),就可以省略訪問(wèn)控制符。當(dāng)需要控制一個(gè)類(lèi)中的成員數(shù)據(jù)時(shí),可以將這個(gè)類(lèi)中的成員數(shù)據(jù)訪問(wèn)控制符設(shè)置為public、protected,或者省略。如何使用訪問(wèn)控制符訪問(wèn)控制符可以讓我們很方便的控制代碼的權(quán)限17Java變量的作用域在Java中,變量的作用域分為四個(gè)級(jí)別:類(lèi)級(jí)、對(duì)象實(shí)例級(jí)、方法級(jí)、塊級(jí)。類(lèi)級(jí)變量又稱(chēng)全局級(jí)變量或靜態(tài)變量,需要使用static關(guān)鍵字修飾,你可以與C/C++中的static變量對(duì)比學(xué)習(xí)。類(lèi)級(jí)變量在類(lèi)定義后就已經(jīng)存在,占用內(nèi)存空間,可以通過(guò)類(lèi)名來(lái)訪問(wèn),不需要實(shí)例化。對(duì)象實(shí)例級(jí)變量就是成員變量,實(shí)例化后才會(huì)分配內(nèi)存空間,才能訪問(wèn)。方法級(jí)變量就是在方法內(nèi)部定義的變量,就是局部變量。塊級(jí)變量就是定義在一個(gè)塊內(nèi)部的變量,變量的生存周期就是這個(gè)塊,出了這個(gè)塊就消失了,比如if、for語(yǔ)句的塊。Java變量的作用域在Java中,變量的作用域分為四個(gè)級(jí)別:18方法內(nèi)部除了能訪問(wèn)方法級(jí)的變量,還可以訪問(wèn)類(lèi)級(jí)和實(shí)例級(jí)的變量。塊內(nèi)部能夠訪問(wèn)類(lèi)級(jí)、實(shí)例級(jí)變量,如果塊被包含在方法內(nèi)部,它還可以訪問(wèn)方法級(jí)的變量。方法級(jí)和塊級(jí)的變量必須被顯示地初始化,否則不能訪問(wèn)。方法內(nèi)部除了能訪問(wèn)方法級(jí)的變量,還可以訪問(wèn)類(lèi)級(jí)和實(shí)例級(jí)的變量19this關(guān)鍵字詳解this關(guān)鍵字用來(lái)表示當(dāng)前對(duì)象本身,或當(dāng)前類(lèi)的一個(gè)實(shí)例,通過(guò)this可以調(diào)用本對(duì)象的所有方法和屬性。注意:this只有在類(lèi)實(shí)例化后才有意義。this關(guān)鍵字詳解this關(guān)鍵字用來(lái)表示當(dāng)前對(duì)象本身,或當(dāng)20Java類(lèi)與對(duì)象詳解課件21方法重載在Java中,同一個(gè)類(lèi)中的多個(gè)方法可以有相同的名字,只要它們的參數(shù)列表不同就可以,這被稱(chēng)為方法重載(method

overloading)。

參數(shù)列表又叫參數(shù)簽名,包括參數(shù)的類(lèi)型、參數(shù)的個(gè)數(shù)和參數(shù)的順序,只要有一個(gè)不同就叫做參數(shù)列表不同。

重載是面向?qū)ο蟮囊粋€(gè)基本特性。方法重載在Java中,同一個(gè)類(lèi)中的多個(gè)方法可以有相同的名字,22Java類(lèi)與對(duì)象詳解課件23說(shuō)明參數(shù)列表不同包括:個(gè)數(shù)不同、類(lèi)型不同和順序不同。僅僅參數(shù)變量名稱(chēng)不同是不可以的。跟成員方法一樣,構(gòu)造方法也可以重載。聲明為final的方法不能被重載。聲明為static的方法不能被重載,但是能夠被再次聲明。說(shuō)明參數(shù)列表不同包括:個(gè)數(shù)不同、類(lèi)型不同和順序不同。24方法的重載的規(guī)則方法名稱(chēng)必須相同。參數(shù)列表必須不同(個(gè)數(shù)不同、或類(lèi)型不同、參數(shù)排列順序不同等)。方法的返回類(lèi)型可以相同也可以不相同。僅僅返回類(lèi)型不同不足以成為方法的重載。方法的重載的規(guī)則方法名稱(chēng)必須相同。25方法名稱(chēng)相同時(shí),編譯器會(huì)根據(jù)調(diào)用方法的參數(shù)個(gè)數(shù)、參數(shù)類(lèi)型等去逐個(gè)匹配,以選擇對(duì)應(yīng)的方法,如果匹配失敗,則編譯器報(bào)錯(cuò),這叫做重載分辨。方法名稱(chēng)相同時(shí),編譯器會(huì)根據(jù)調(diào)用方法的參數(shù)個(gè)數(shù)、參數(shù)類(lèi)型等去26Java類(lèi)的基本運(yùn)行順序Java類(lèi)的基本運(yùn)行順序27基本運(yùn)行順序是:先運(yùn)行到第9行,這是程序的入口。然后運(yùn)行到第10行,這里要new一個(gè)Demo,就要調(diào)用Demo的構(gòu)造方法。就運(yùn)行到第5行,注意:可能很多人覺(jué)得接下來(lái)就應(yīng)該運(yùn)行第6行了,錯(cuò)!初始化一個(gè)類(lèi),必須先初始化它的屬性。因此運(yùn)行到第2行,然后是第3行。屬性初始化完過(guò)后,才回到構(gòu)造方法,執(zhí)行里面的代碼,也就是第6行、第7行。然后是第8行,表示new一個(gè)Demo實(shí)例完成。然后回到main方法中執(zhí)行第11行。然后是第12行,main方法執(zhí)行完畢?;具\(yùn)行順序是:28Java包裝類(lèi)、拆箱和裝箱詳解雖然Java語(yǔ)言是典型的面向?qū)ο缶幊陶Z(yǔ)言,但其中的八種基本數(shù)據(jù)類(lèi)型并不支持面向?qū)ο缶幊蹋绢?lèi)型的數(shù)據(jù)不具備“對(duì)象”的特性——不攜帶屬性、沒(méi)有方法可調(diào)用。沿用它們只是為了迎合人類(lèi)根深蒂固的習(xí)慣,并的確能簡(jiǎn)單、有效地進(jìn)行常規(guī)數(shù)據(jù)處理。

這種借助于非面向?qū)ο蠹夹g(shù)的做法有時(shí)也會(huì)帶來(lái)不便,比如引用類(lèi)型數(shù)據(jù)均繼承了Object類(lèi)的特性,要轉(zhuǎn)換為String類(lèi)型(經(jīng)常有這種需要)時(shí)只要簡(jiǎn)單調(diào)用Object類(lèi)中定義的toString()即可,而基本數(shù)據(jù)類(lèi)型轉(zhuǎn)換為String類(lèi)型則要麻煩得多。為解決此類(lèi)問(wèn)題,Java為每種基本數(shù)據(jù)類(lèi)型分別設(shè)計(jì)了對(duì)應(yīng)的類(lèi),稱(chēng)之為包裝類(lèi)(WrapperClasses),也有教材稱(chēng)為外覆類(lèi)或數(shù)據(jù)類(lèi)型類(lèi)。Java包裝類(lèi)、拆箱和裝箱詳解雖然Java語(yǔ)言是典型的面29Java類(lèi)與對(duì)象詳解課件30Java類(lèi)與對(duì)象詳解課件31Java類(lèi)與對(duì)象詳解課件32自動(dòng)拆箱和裝箱上面的例子都需要手動(dòng)實(shí)例化一個(gè)包裝類(lèi),稱(chēng)為手動(dòng)拆箱裝箱。Java1.5(5.0)之前必須手動(dòng)拆箱裝箱。

Java1.5之后可以自動(dòng)拆箱裝箱,也就是在進(jìn)行基本數(shù)據(jù)類(lèi)型和對(duì)應(yīng)的包裝類(lèi)轉(zhuǎn)換時(shí),系統(tǒng)將自動(dòng)進(jìn)行,這將大大方便程序員的代碼書(shū)寫(xiě)。自動(dòng)拆箱和裝箱上面的例子都需要手動(dòng)實(shí)例化一個(gè)包裝類(lèi),稱(chēng)為手動(dòng)33Java類(lèi)與對(duì)象詳解課件34再談Java包在Java中,為了組織代碼的方便,可以將功能相似的類(lèi)放到一個(gè)文件夾內(nèi),這個(gè)文件夾,就叫做包。

包不但可以包含類(lèi),還可以包含接口和其他的包。包以"."來(lái)表示層級(jí)關(guān)系,例如p1.p2.Test表示的目錄為\p1\p2\Test.class。再談Java包在Java中,為了組織代碼的方便,可以將功能相35如何實(shí)現(xiàn)包通過(guò)package關(guān)鍵字可以聲明一個(gè)包,例如:

packagep1.p2;

必須將package語(yǔ)句放在所有語(yǔ)句的前面packagep1.p2;public

classTest{publicTest(){System.out.println("我是Test類(lèi)的構(gòu)造方法");}}如何實(shí)現(xiàn)包通過(guò)package關(guān)鍵字可以聲明一個(gè)包,例如:36包的調(diào)用1)在每個(gè)類(lèi)名前面加上完整的包名public

classDemo{public

staticvoidmain(String[]args){java.util.Datetoday=newjava.util.Date();System.out.println(today);}}包的調(diào)用1)在每個(gè)類(lèi)名前面加上完整的包名37包的調(diào)用2)通過(guò)import語(yǔ)句引入包中的類(lèi)importjava.util.Date;//也可以引入java.util包中的所有類(lèi)//importjava.util.*;public

classDemo{public

staticvoidmain(String[]args){Datetoday=newDate();System.out.println(today);}}包的調(diào)用38包的訪問(wèn)權(quán)限被聲明為public的類(lèi)、方法或成員變量,可以被任何包下的任何類(lèi)使用,而聲明為private的類(lèi)、方法或成員變量,只能被本類(lèi)使用。

沒(méi)有任何修飾符的類(lèi)、方法和成員變量,只能被本包中的所有類(lèi)訪問(wèn),在包以外任何類(lèi)都無(wú)法訪問(wèn)它。包的訪問(wèn)權(quán)限被聲明為public的類(lèi)、方法或成員變量,可39Java源文件的聲明規(guī)則當(dāng)在一個(gè)源文件中定義多個(gè)類(lèi),并且還有import語(yǔ)句和package語(yǔ)句時(shí),要特別注意這些規(guī)則:一個(gè)源文件中只能有一個(gè)public類(lèi)。一個(gè)源文件可以有多個(gè)非public類(lèi)。源文件的名稱(chēng)應(yīng)該和public類(lèi)的類(lèi)名保持一致。例如:源文件中public類(lèi)的類(lèi)名是Employee,那么源文件應(yīng)該命名為Employee.java。如果一個(gè)類(lèi)定義在某個(gè)包中,那么package語(yǔ)句應(yīng)該在源文件的首行。Java源文件的聲明規(guī)則當(dāng)在一個(gè)源文件中定義多個(gè)類(lèi),并且還有40Java源文件的聲明規(guī)則如果源文件包含import語(yǔ)句,那么應(yīng)該放在package語(yǔ)句和類(lèi)定義之間。如果沒(méi)有package語(yǔ)句,那么import語(yǔ)句應(yīng)該在源文件中最前面。import語(yǔ)句和package語(yǔ)句對(duì)源文件中定義的所有類(lèi)都有效。在同一源文件中,不能給不同的類(lèi)不同的包聲明。類(lèi)有若干種訪問(wèn)級(jí)別,并且類(lèi)也分不同的類(lèi)型:抽象類(lèi)和final類(lèi)等。這些將在后續(xù)章節(jié)介紹。除了上面提到的幾種類(lèi)型,Java還有一些特殊的類(lèi),如內(nèi)部類(lèi)、匿名類(lèi)。

Java源文件的聲明規(guī)則如果源文件包含import語(yǔ)句,那么41Java類(lèi)與對(duì)象詳解課件42Java類(lèi)與對(duì)象詳解課件43Java類(lèi)與對(duì)象詳解Java類(lèi)與對(duì)象詳解44Java類(lèi)的定義及其實(shí)例化類(lèi)必須先定義才能使用。類(lèi)是創(chuàng)建對(duì)象的模板,創(chuàng)建對(duì)象也叫類(lèi)的實(shí)例化。Java類(lèi)的定義及其實(shí)例化類(lèi)必須先定義才能使用。類(lèi)是創(chuàng)建對(duì)象45Java類(lèi)與對(duì)象詳解課件46示例說(shuō)明public是類(lèi)的修飾符,表明該類(lèi)是公共類(lèi),可以被其他類(lèi)訪問(wèn)。class是定義類(lèi)的關(guān)鍵字。Dog是類(lèi)名稱(chēng)。name、age

是類(lèi)的成員變量,也叫屬性;bark()、hungry()

是類(lèi)中的函數(shù),也叫方法。一個(gè)類(lèi)可以包含以下類(lèi)型變量:局部變量:在方法或者語(yǔ)句塊中定義的變量被稱(chēng)為局部變量。變量聲明和初始化都是在方法中,方法結(jié)束后,變量就會(huì)自動(dòng)銷(xiāo)毀。成員變量:成員變量是定義在類(lèi)中、方法體之外的變量。這種變量在創(chuàng)建對(duì)象的時(shí)候?qū)嵗ǚ峙鋬?nèi)存)。成員變量可以被類(lèi)中的方法和特定類(lèi)的語(yǔ)句訪問(wèn)。類(lèi)變量:類(lèi)變量也聲明在類(lèi)中,方法體之外,但必須聲明為static類(lèi)型。static也是修飾符的一種示例說(shuō)明public是類(lèi)的修飾符,表明該類(lèi)是公共類(lèi),可以被47構(gòu)造方法在類(lèi)實(shí)例化的過(guò)程中自動(dòng)執(zhí)行的方法叫做構(gòu)造方法,它不需要你手動(dòng)調(diào)用。構(gòu)造方法可以在類(lèi)實(shí)例化的過(guò)程中做一些初始化的工作。

構(gòu)造方法的名稱(chēng)必須與類(lèi)的名稱(chēng)相同,并且沒(méi)有返回值。

每個(gè)類(lèi)都有構(gòu)造方法。如果沒(méi)有顯式地為類(lèi)定義構(gòu)造方法,Java編譯器將會(huì)為該類(lèi)提供一個(gè)默認(rèn)的構(gòu)造方法。構(gòu)造方法在類(lèi)實(shí)例化的過(guò)程中自動(dòng)執(zhí)行的方法叫做構(gòu)造方法,它不需48Java類(lèi)與對(duì)象詳解課件49創(chuàng)建對(duì)象對(duì)象是類(lèi)的一個(gè)實(shí)例,創(chuàng)建對(duì)象的過(guò)程也叫類(lèi)的實(shí)例化。對(duì)象是以類(lèi)為模板來(lái)創(chuàng)建的。

在Java中,使用new關(guān)鍵字來(lái)創(chuàng)建對(duì)象,一般有以下三個(gè)步驟:聲明:聲明一個(gè)對(duì)象,包括對(duì)象名稱(chēng)和對(duì)象類(lèi)型。實(shí)例化:使用關(guān)鍵字new來(lái)創(chuàng)建一個(gè)對(duì)象。初始化:使用new創(chuàng)建對(duì)象時(shí),會(huì)調(diào)用構(gòu)造方法初始化對(duì)象。創(chuàng)建對(duì)象對(duì)象是類(lèi)的一個(gè)實(shí)例,創(chuàng)建對(duì)象的過(guò)程也叫類(lèi)的實(shí)例化。對(duì)50訪問(wèn)成員變量和方法訪問(wèn)成員變量和方法51Java訪問(wèn)修飾符(訪問(wèn)控制符)Java通過(guò)修飾符來(lái)控制類(lèi)、屬性和方法的訪問(wèn)權(quán)限和其他功能,通常放在語(yǔ)句的最前端。Java的修飾符很多,分為訪問(wèn)修飾符和非訪問(wèn)修飾符。訪問(wèn)修飾符也叫訪問(wèn)控制符,是指能夠控制類(lèi)、成員變量、方法的使用權(quán)限的關(guān)鍵字。

在面向?qū)ο缶幊讨?,訪問(wèn)控制符是一個(gè)很重要的概念,可以使用它來(lái)保護(hù)對(duì)類(lèi)、變量、方法和構(gòu)造方法的訪問(wèn)。

Java訪問(wèn)修飾符(訪問(wèn)控制符)Java通過(guò)修飾符來(lái)控制類(lèi)52Java類(lèi)與對(duì)象詳解課件53public:公有的被聲明為public的類(lèi)、方法、構(gòu)造方法和接口能夠被任何其他類(lèi)訪問(wèn)。

如果幾個(gè)相互訪問(wèn)的public類(lèi)分布在不用的包中,則需要導(dǎo)入相應(yīng)public類(lèi)所在的包。由于類(lèi)的繼承性,類(lèi)所有的公有方法和變量都能被其子類(lèi)繼承。Java程序的main()方法必須設(shè)置成公有的,否則,Java解釋器將不能運(yùn)行該類(lèi)。public:公有的被聲明為public的類(lèi)、方法、構(gòu)造方法54protected:受保護(hù)的被聲明為protected的變量、方法和構(gòu)造方法能被同一個(gè)包中的任何其他類(lèi)訪問(wèn),也能夠被不同包中的子類(lèi)訪問(wèn)。

protected訪問(wèn)修飾符不能修飾類(lèi)和接口,方法和成員變量能夠聲明為protected,但是接口的成員變量和成員方法不能聲明為protected。

子類(lèi)能訪問(wèn)protected修飾符聲明的方法和變量,這樣就能保護(hù)不相關(guān)的類(lèi)使用這些方法和變量。protected:受保護(hù)的被聲明為protected的變量55private:私有的私有訪問(wèn)修飾符是最嚴(yán)格的訪問(wèn)級(jí)別,所以被聲明為private的方法、變量和構(gòu)造方法只能被所屬類(lèi)訪問(wèn),并且類(lèi)和接口不能聲明為private。

聲明為私有訪問(wèn)類(lèi)型的變量只能通過(guò)類(lèi)中公共的Getter/Setter方法被外部類(lèi)訪問(wèn)。

private訪問(wèn)修飾符的使用主要用來(lái)隱藏類(lèi)的實(shí)現(xiàn)細(xì)節(jié)和保護(hù)類(lèi)的數(shù)據(jù)。private:私有的私有訪問(wèn)修飾符是最嚴(yán)格的訪問(wèn)級(jí)別,所以56在類(lèi)中定義訪問(wèn)私有變量的方法,習(xí)慣上是這樣命名的:在變量名稱(chēng)前面加“get”或“set”,并將變量的首字母大寫(xiě)。例如,獲取私有變量name的方法為getName(),設(shè)置name的方法為setName()。這些方法經(jīng)常使用,也有了特定的稱(chēng)呼,稱(chēng)為Getter和Setter方法。在類(lèi)中定義訪問(wèn)私有變量的方法,習(xí)慣上是這樣命名的:在變量名稱(chēng)57默認(rèn)的:不使用任何關(guān)鍵字不使用任何修飾符聲明的屬性和方法,對(duì)同一個(gè)包內(nèi)的類(lèi)是可見(jiàn)的。接口里的變量都隱式聲明為publicstaticfinal,而接口里的方法默認(rèn)情況下訪問(wèn)權(quán)限為public。默認(rèn)的:不使用任何關(guān)鍵字不使用任何修飾符聲明的屬性和方法,對(duì)58訪問(wèn)控制和繼承父類(lèi)中聲明為public的方法在子類(lèi)中也必須為public。父類(lèi)中聲明為protected的方法在子類(lèi)中要么聲明為protected,要么聲明為public。不能聲明為private。父類(lèi)中默認(rèn)修飾符聲明的方法,能夠在子類(lèi)中聲明為private。父類(lèi)中聲明為private的方法,不能夠被繼承。訪問(wèn)控制和繼承父類(lèi)中聲明為public的方法在子類(lèi)中也必須為59如何使用訪問(wèn)控制符訪問(wèn)控制符可以讓我們很方便的控制代碼的權(quán)限:

當(dāng)需要讓自己編寫(xiě)的類(lèi)被所有的其他類(lèi)訪問(wèn)時(shí),就可以將類(lèi)的訪問(wèn)控制符聲明為public。當(dāng)需要讓自己的類(lèi)只能被自己的包中的類(lèi)訪問(wèn)時(shí),就可以省略訪問(wèn)控制符。當(dāng)需要控制一個(gè)類(lèi)中的成員數(shù)據(jù)時(shí),可以將這個(gè)類(lèi)中的成員數(shù)據(jù)訪問(wèn)控制符設(shè)置為public、protected,或者省略。如何使用訪問(wèn)控制符訪問(wèn)控制符可以讓我們很方便的控制代碼的權(quán)限60Java變量的作用域在Java中,變量的作用域分為四個(gè)級(jí)別:類(lèi)級(jí)、對(duì)象實(shí)例級(jí)、方法級(jí)、塊級(jí)。類(lèi)級(jí)變量又稱(chēng)全局級(jí)變量或靜態(tài)變量,需要使用static關(guān)鍵字修飾,你可以與C/C++中的static變量對(duì)比學(xué)習(xí)。類(lèi)級(jí)變量在類(lèi)定義后就已經(jīng)存在,占用內(nèi)存空間,可以通過(guò)類(lèi)名來(lái)訪問(wèn),不需要實(shí)例化。對(duì)象實(shí)例級(jí)變量就是成員變量,實(shí)例化后才會(huì)分配內(nèi)存空間,才能訪問(wèn)。方法級(jí)變量就是在方法內(nèi)部定義的變量,就是局部變量。塊級(jí)變量就是定義在一個(gè)塊內(nèi)部的變量,變量的生存周期就是這個(gè)塊,出了這個(gè)塊就消失了,比如if、for語(yǔ)句的塊。Java變量的作用域在Java中,變量的作用域分為四個(gè)級(jí)別:61方法內(nèi)部除了能訪問(wèn)方法級(jí)的變量,還可以訪問(wèn)類(lèi)級(jí)和實(shí)例級(jí)的變量。塊內(nèi)部能夠訪問(wèn)類(lèi)級(jí)、實(shí)例級(jí)變量,如果塊被包含在方法內(nèi)部,它還可以訪問(wèn)方法級(jí)的變量。方法級(jí)和塊級(jí)的變量必須被顯示地初始化,否則不能訪問(wèn)。方法內(nèi)部除了能訪問(wèn)方法級(jí)的變量,還可以訪問(wèn)類(lèi)級(jí)和實(shí)例級(jí)的變量62this關(guān)鍵字詳解this關(guān)鍵字用來(lái)表示當(dāng)前對(duì)象本身,或當(dāng)前類(lèi)的一個(gè)實(shí)例,通過(guò)this可以調(diào)用本對(duì)象的所有方法和屬性。注意:this只有在類(lèi)實(shí)例化后才有意義。this關(guān)鍵字詳解this關(guān)鍵字用來(lái)表示當(dāng)前對(duì)象本身,或當(dāng)63Java類(lèi)與對(duì)象詳解課件64方法重載在Java中,同一個(gè)類(lèi)中的多個(gè)方法可以有相同的名字,只要它們的參數(shù)列表不同就可以,這被稱(chēng)為方法重載(method

overloading)。

參數(shù)列表又叫參數(shù)簽名,包括參數(shù)的類(lèi)型、參數(shù)的個(gè)數(shù)和參數(shù)的順序,只要有一個(gè)不同就叫做參數(shù)列表不同。

重載是面向?qū)ο蟮囊粋€(gè)基本特性。方法重載在Java中,同一個(gè)類(lèi)中的多個(gè)方法可以有相同的名字,65Java類(lèi)與對(duì)象詳解課件66說(shuō)明參數(shù)列表不同包括:個(gè)數(shù)不同、類(lèi)型不同和順序不同。僅僅參數(shù)變量名稱(chēng)不同是不可以的。跟成員方法一樣,構(gòu)造方法也可以重載。聲明為final的方法不能被重載。聲明為static的方法不能被重載,但是能夠被再次聲明。說(shuō)明參數(shù)列表不同包括:個(gè)數(shù)不同、類(lèi)型不同和順序不同。67方法的重載的規(guī)則方法名稱(chēng)必須相同。參數(shù)列表必須不同(個(gè)數(shù)不同、或類(lèi)型不同、參數(shù)排列順序不同等)。方法的返回類(lèi)型可以相同也可以不相同。僅僅返回類(lèi)型不同不足以成為方法的重載。方法的重載的規(guī)則方法名稱(chēng)必須相同。68方法名稱(chēng)相同時(shí),編譯器會(huì)根據(jù)調(diào)用方法的參數(shù)個(gè)數(shù)、參數(shù)類(lèi)型等去逐個(gè)匹配,以選擇對(duì)應(yīng)的方法,如果匹配失敗,則編譯器報(bào)錯(cuò),這叫做重載分辨。方法名稱(chēng)相同時(shí),編譯器會(huì)根據(jù)調(diào)用方法的參數(shù)個(gè)數(shù)、參數(shù)類(lèi)型等去69Java類(lèi)的基本運(yùn)行順序Java類(lèi)的基本運(yùn)行順序70基本運(yùn)行順序是:先運(yùn)行到第9行,這是程序的入口。然后運(yùn)行到第10行,這里要new一個(gè)Demo,就要調(diào)用Demo的構(gòu)造方法。就運(yùn)行到第5行,注意:可能很多人覺(jué)得接下來(lái)就應(yīng)該運(yùn)行第6行了,錯(cuò)!初始化一個(gè)類(lèi),必須先初始化它的屬性。因此運(yùn)行到第2行,然后是第3行。屬性初始化完過(guò)后,才回到構(gòu)造方法,執(zhí)行里面的代碼,也就是第6行、第7行。然后是第8行,表示new一個(gè)Demo實(shí)例完成。然后回到main方法中執(zhí)行第11行。然后是第12行,main方法執(zhí)行完畢?;具\(yùn)行順序是:71Java包裝類(lèi)、拆箱和裝箱詳解雖然Java語(yǔ)言是典型的面向?qū)ο缶幊陶Z(yǔ)言,但其中的八種基本數(shù)據(jù)類(lèi)型并不支持面向?qū)ο缶幊蹋绢?lèi)型的數(shù)據(jù)不具備“對(duì)象”的特性——不攜帶屬性、沒(méi)有方法可調(diào)用。沿用它們只是為了迎合人類(lèi)根深蒂固的習(xí)慣,并的確能簡(jiǎn)單、有效地進(jìn)行常規(guī)數(shù)據(jù)處理。

這種借助于非面向?qū)ο蠹夹g(shù)的做法有時(shí)也會(huì)帶來(lái)不便,比如引用類(lèi)型數(shù)據(jù)均繼承了Object類(lèi)的特性,要轉(zhuǎn)換為String類(lèi)型(經(jīng)常有這種需要)時(shí)只要簡(jiǎn)單調(diào)用Object類(lèi)中定義的toString()即可,而基本數(shù)據(jù)類(lèi)型轉(zhuǎn)換為String類(lèi)型則要麻煩得多。為解決此類(lèi)問(wèn)題,Java為每種基本數(shù)據(jù)類(lèi)型分別設(shè)計(jì)了對(duì)應(yīng)的類(lèi),稱(chēng)之為包裝類(lèi)(WrapperClasses),也有教材稱(chēng)為外覆類(lèi)或數(shù)據(jù)類(lèi)型類(lèi)。Java包裝類(lèi)、拆箱和裝箱詳解雖然Java語(yǔ)言是典型的面72Java類(lèi)與對(duì)象詳解課件73Java類(lèi)與對(duì)象詳解課件74Java類(lèi)與對(duì)象詳解課件75自動(dòng)拆箱和裝箱上面的例子都需要手動(dòng)實(shí)例化一個(gè)包裝類(lèi),稱(chēng)為手動(dòng)拆箱裝箱。Java1.5(5.0)之前必須手動(dòng)拆箱裝箱。

Java1.5之后可以自動(dòng)拆箱裝箱,也就是在進(jìn)行基本數(shù)據(jù)類(lèi)型和對(duì)應(yīng)的包裝類(lèi)轉(zhuǎn)換時(shí),系統(tǒng)將自動(dòng)進(jìn)行,這將大大方便程序員的代碼書(shū)寫(xiě)。自動(dòng)拆箱和裝箱上面的例子都需要手動(dòng)實(shí)例化一個(gè)包裝類(lèi),稱(chēng)為手動(dòng)76Java類(lèi)與對(duì)象詳解課件77再談Java包在Java中,為了組織代碼的方便,可以將功能相似的類(lèi)放到一個(gè)文件夾內(nèi),這個(gè)文件夾,就叫做包。

包不但可以包含類(lèi),還可以包含接口和其他的包。包以"."來(lái)表示層級(jí)關(guān)系,例如p1.p2.Test表示的目錄為\p1\p2\Test.class。再談Java包在Java中,為了組織代碼的方便,可以將功能相78如何實(shí)現(xiàn)包通過(guò)package關(guān)鍵字可以聲明一個(gè)包,例如:

packagep1.p2;

必須將package語(yǔ)句放在所有語(yǔ)句的前面packagep1.p2;public

classTest{publi

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論