版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Contents面向?qū)ο缶幊填?lèi)聲明和類(lèi)體類(lèi)體的構(gòu)成構(gòu)造方法與對(duì)象的創(chuàng)建對(duì)象的引用與實(shí)體成員變量方法方法重載關(guān)鍵字thisv包vimport語(yǔ)句v訪(fǎng)問(wèn)權(quán)限v對(duì)象的組合v基本類(lèi)型數(shù)據(jù)的類(lèi)包裝v反編譯和文檔生成器vJAR文件第1頁(yè)/共54頁(yè)4.1面向?qū)ο缶幊?面向?qū)ο蟮幕舅枷胧牵瑥默F(xiàn)實(shí)世界中客觀存在的事物觸發(fā)來(lái)構(gòu)造軟件系統(tǒng),并在系統(tǒng)的構(gòu)造中盡可能運(yùn)用人類(lèi)的自然思維方法 面向?qū)ο蟾訌?qiáng)調(diào)運(yùn)用人類(lèi)在日常的思維邏輯中經(jīng)常采用的思想方法與原則,如抽象、分類(lèi)、繼承、聚合、多態(tài)等第2頁(yè)/共54頁(yè)對(duì)象和類(lèi)的概念 對(duì)象用計(jì)算機(jī)語(yǔ)言對(duì)問(wèn)題域中事物的描述,對(duì)象通過(guò)“屬性”和“方法”來(lái)分別對(duì)應(yīng)事物所具有的靜態(tài)屬性和動(dòng)態(tài)
2、屬性 類(lèi)是用于描述同一類(lèi)型的對(duì)象的一個(gè)抽象的概念,類(lèi)中定義了這一類(lèi)對(duì)象所應(yīng)具有的靜態(tài)和動(dòng)態(tài)屬性 類(lèi)可以看成一類(lèi)對(duì)象的模板,對(duì)象可以看成該類(lèi)的一個(gè)具體實(shí)例4.14.1面向?qū)ο缶幊堂嫦驅(qū)ο缶幊痰?頁(yè)/共54頁(yè)Java與面向?qū)ο?對(duì)象是Java程序的核心,在Java程序中“萬(wàn)事萬(wàn)物皆對(duì)象”,首先必須定義類(lèi)才能有對(duì)象 對(duì)象可以看成是靜態(tài)屬性(成員變量)和動(dòng)態(tài)屬性(方法)的封裝體 類(lèi)是用來(lái)創(chuàng)建同一類(lèi)型的對(duì)象的“模塊”,在一個(gè)類(lèi)中定義了該類(lèi)對(duì)象所應(yīng)具有的成員變量以及方法,Person類(lèi) Java SE提供了很多類(lèi)供編程人員使用,編程人員也可定義自己的類(lèi) 成員變量成員變量=屬性屬性 方法方法=函數(shù)函數(shù)4.1
3、4.1面向?qū)ο缶幊堂嫦驅(qū)ο缶幊痰?頁(yè)/共54頁(yè)4.2 類(lèi)聲明和類(lèi)體在語(yǔ)法上,類(lèi)由兩部分構(gòu)成:類(lèi)聲明和類(lèi)體?;靖袷綖椋?class 類(lèi)名 類(lèi)體的內(nèi)容 類(lèi)的聲明部分類(lèi)的聲明部分類(lèi)命名的習(xí)慣:類(lèi)命名的習(xí)慣:(1)如果類(lèi)名使用拉丁字母,那么)如果類(lèi)名使用拉丁字母,那么名字的首字母使用名字的首字母使用 大寫(xiě)字母,如大寫(xiě)字母,如Hello、Time、People等。等。(2)類(lèi)名最好容易識(shí)別、見(jiàn)名知意。)類(lèi)名最好容易識(shí)別、見(jiàn)名知意。當(dāng)類(lèi)名由幾個(gè)當(dāng)類(lèi)名由幾個(gè)“單詞單詞”復(fù)合而成時(shí),復(fù)合而成時(shí),每個(gè)單詞的首寫(xiě)字母使用大寫(xiě),如每個(gè)單詞的首寫(xiě)字母使用大寫(xiě),如BeijingTime、AmericanGame、He
4、lloChina等。等。類(lèi)體類(lèi)體class Dog class Person 第5頁(yè)/共54頁(yè)類(lèi)類(lèi)描述一類(lèi)事物共有的屬性和功能共有的屬性和功能,即將數(shù)據(jù)和對(duì)數(shù)據(jù)的操作封裝在一起。這個(gè)過(guò)程由類(lèi)體類(lèi)實(shí)現(xiàn)。所以類(lèi)體的內(nèi)容包含兩種類(lèi)型的成員:1成員變量:通過(guò)變量聲明定義的變量,稱(chēng)作成員變量或域,用來(lái)刻畫(huà)類(lèi)創(chuàng)建的對(duì)象的屬性。2方法:方法是類(lèi)體的重要成員之一。其中的構(gòu)造方法是具有特殊地位的方法,供類(lèi)創(chuàng)建對(duì)象時(shí)使用,用來(lái)給出類(lèi)所創(chuàng)建的對(duì)象的初始狀態(tài),另一類(lèi)方法,可以由類(lèi)所創(chuàng)建的對(duì)象調(diào)用,對(duì)象調(diào)用這些方法操作成員變量形成一定的算法,體現(xiàn)對(duì)象具有某種功能。4.3 類(lèi)體的構(gòu)成聲明成員變量的格式為: type =d
5、efaultValue;例如:private int id; private int age=20;聲明方法的格式為: () 例如:public int getAge() return age; 第6頁(yè)/共54頁(yè)/用class關(guān)鍵字定義一個(gè)類(lèi),名字為Personpublic class Person/成員變量定義private int id;private int age=20;/方法定義public int getAge()return age;public void setAge(int i)age=I;public int getId()return id;4.3 類(lèi)體的構(gòu)成第7頁(yè)/共5
6、4頁(yè)4.3 類(lèi)體的構(gòu)成 成員變量可以使成員變量可以使Java語(yǔ)言語(yǔ)言中任何一種數(shù)據(jù)類(lèi)型(包中任何一種數(shù)據(jù)類(lèi)型(包括基本類(lèi)型和引用類(lèi)型)括基本類(lèi)型和引用類(lèi)型) 在定義成員變量時(shí)可以對(duì)在定義成員變量時(shí)可以對(duì)其初始化,如果不對(duì)其初其初始化,如果不對(duì)其初始化,始化,Java使用默認(rèn)的值使用默認(rèn)的值對(duì)其初始化(右圖)對(duì)其初始化(右圖) 成員變量的作用范圍為整成員變量的作用范圍為整個(gè)類(lèi)體,與它在類(lèi)體中書(shū)個(gè)類(lèi)體,與它在類(lèi)體中書(shū)寫(xiě)的先后位置無(wú)關(guān)寫(xiě)的先后位置無(wú)關(guān)。第8頁(yè)/共54頁(yè)4.4 構(gòu)造方法與對(duì)象的創(chuàng)建 類(lèi)中有一部分方法稱(chēng)作構(gòu)造方法,類(lèi)創(chuàng)建對(duì)象時(shí)需使用構(gòu)造方法,以便給類(lèi)所創(chuàng)建的對(duì)象一個(gè)合理的初始狀態(tài)。例如:
7、Person類(lèi)的構(gòu)造方法(函數(shù))public class Personint id;int age;Person() /無(wú)參數(shù)構(gòu)造方法Person(int n,int i) /有參數(shù)構(gòu)造方法id=n;age=I; n 構(gòu)造方法是一種特殊方法,它的名字必須與它所在的類(lèi)的名字完全相同,并且不返回任何數(shù)據(jù)類(lèi)型,即它是void型,但void必須省略不寫(xiě)。n Java允許一個(gè)類(lèi)中有若干個(gè)構(gòu)造方法,但這些構(gòu)造方法的參數(shù)必須不同,即或者是參數(shù)的個(gè)數(shù)不同,或者是參數(shù)的類(lèi)型不同。v構(gòu)造方法構(gòu)造方法第9頁(yè)/共54頁(yè) 1對(duì)象的聲明對(duì)象的聲明 一般格式為: 類(lèi)的名字 對(duì)象名字; 如: Person pOne;4.4
8、構(gòu)造方法與對(duì)象的創(chuàng)建v對(duì)象的創(chuàng)建對(duì)象的創(chuàng)建2為聲明的對(duì)象分配成員變量 使用new運(yùn)算符和類(lèi)的構(gòu)造方法為聲明的對(duì)象分配成員變量,如果類(lèi)中沒(méi)有構(gòu)造方法,系統(tǒng)會(huì)調(diào)用默認(rèn)的構(gòu)造方法(默認(rèn)的構(gòu)造方法是無(wú)參數(shù)的) 上述的Person類(lèi)提供了2個(gè)構(gòu)造方法,下面都是合法的創(chuàng)建對(duì)象的語(yǔ)句: pOne =new Person (); 或 pOne =new Person (1,25); 如果類(lèi)里定義了一個(gè)或多個(gè)構(gòu)造方法,那么Java不提供默認(rèn)的構(gòu)造方法。如果上述Person只提供一個(gè)帶參數(shù)的構(gòu)造方法,代碼: pOne =new Person (); /創(chuàng)建對(duì)象是非法的。第10頁(yè)/共54頁(yè)類(lèi)和對(duì)象的關(guān)系 會(huì)實(shí)現(xiàn)下述
9、兩件事: (1)為成員變量分配內(nèi)存空間,然后執(zhí)行構(gòu)造方法中的語(yǔ)句 。 (2)給出一個(gè)信息,已確保這些成員變量是屬于對(duì)象 c1或c2的 。4.4 4.4 構(gòu)造方法與對(duì)象的創(chuàng)建構(gòu)造方法與對(duì)象的創(chuàng)建創(chuàng)建對(duì)象就是指為它分配成員變量,并獲得一個(gè)引用,以確保這些成員變量由它來(lái)“操作管理”。 分配實(shí)體后的對(duì)象ji 20 100 xAA11c1第11頁(yè)/共54頁(yè) 如何在內(nèi)存中區(qū)分類(lèi)和對(duì)象? 類(lèi)是靜態(tài)的概念,置于代碼區(qū) 對(duì)象是new出來(lái)的,位于堆內(nèi)存,類(lèi)的每個(gè)成員變量在不同的對(duì)象中都有不同的值(除了靜態(tài)變量),而方法只有一份,執(zhí)行的時(shí)候才占用內(nèi)存4.4 4.4 構(gòu)造方法與對(duì)象的創(chuàng)建構(gòu)造方法與對(duì)象的創(chuàng)建第12頁(yè)/
10、共54頁(yè)3創(chuàng)建多個(gè)不同的對(duì)象 一個(gè)類(lèi)通過(guò)使用new運(yùn)算符可以創(chuàng)建多個(gè)不同的對(duì)象,這些對(duì)象將被分配不同的內(nèi)存空間,因此,改變其中一個(gè)對(duì)象的狀態(tài)不會(huì)影響其它對(duì)象的狀態(tài)。例如,我們使用前面的Person類(lèi)創(chuàng)建兩個(gè)對(duì)象:pOne、pTwo。 pOne =new Person(10,20); pTwo =new Person(11,66); 當(dāng)創(chuàng)建對(duì)象pOne時(shí),Person類(lèi)中的成員變量id、age被分配內(nèi)存空間,并返回一個(gè)引用給pOne; 4.4 4.4 構(gòu)造方法與對(duì)象的創(chuàng)建構(gòu)造方法與對(duì)象的創(chuàng)建 當(dāng)再創(chuàng)建一個(gè)對(duì)象pTwo時(shí), Person類(lèi)中的成員變量id、age再一次被分配內(nèi)存空間,并返回一個(gè) 引
11、用給pTwo 。內(nèi)存模型如圖所示。ageid 20 100 xAA11pOne 創(chuàng)建多個(gè)對(duì)象創(chuàng)建多個(gè)對(duì)象ageid 66 110 xBB42pTwo第13頁(yè)/共54頁(yè)4.4 構(gòu)造方法與對(duì)象的創(chuàng)建4使用對(duì)象 對(duì)象不僅可以操作自己的變量改變狀態(tài),而且還擁有了使用創(chuàng)建它的那個(gè)類(lèi)中的方法的能力,對(duì)象通過(guò)使用這些方法可以產(chǎn)生一定的行為。 通過(guò)使用運(yùn)算符“.”,對(duì)象可以實(shí)現(xiàn)對(duì)自己的變量訪(fǎng)問(wèn)和方法的調(diào)用。 (1)對(duì)象操作自己的變量(對(duì)象的屬性) (2)對(duì)象調(diào)用類(lèi)中的方法(對(duì)象的功能)演示例演示例4-1第14頁(yè)/共54頁(yè)4.5 對(duì)象的引用與實(shí)體 我們已經(jīng)知道,當(dāng)用類(lèi)創(chuàng)建一個(gè)對(duì)象時(shí),成員變量被分配內(nèi)存空間,這些
12、內(nèi)存空間稱(chēng)做該對(duì)象的實(shí)體,而對(duì)象中存放著引用,以確保這些變量由該對(duì)象操作使用。因此,如果兩個(gè)對(duì)象有相同的引用,那么就具有同樣的實(shí)體。 假如使用例子1“Lader”類(lèi)的構(gòu)造方法創(chuàng)建了兩個(gè)對(duì)象 t1,t2。 t1=new Lader(11,22,33); t2=new Lader(6,12,18);第15頁(yè)/共54頁(yè) “垃圾回收垃圾回收”機(jī)制:機(jī)制: Java的運(yùn)行環(huán)境周期地檢測(cè)某個(gè)實(shí)體是否已不再被任何對(duì)象所引用,如果發(fā)現(xiàn)這樣的實(shí)體,就釋放實(shí)體占有的內(nèi)存。因此,Java編程人員不必象C+程序員那樣,要時(shí)刻自己檢查哪些對(duì)象應(yīng)該釋放內(nèi)存。當(dāng)把變量t2中存放的引用賦給t1后,最初分配給對(duì)象t1的成員變量
13、(實(shí)體)所占有的內(nèi)存就會(huì)被釋放。 沒(méi)有實(shí)體的對(duì)象稱(chēng)作空對(duì)象??諏?duì)象不能使用,即不能讓一個(gè)空對(duì)象去調(diào)用方法產(chǎn)生行為。 假如程序中使用了空對(duì)象,程序在運(yùn)行時(shí)會(huì)出現(xiàn)異常:NullPointerException。由于對(duì)象是動(dòng)態(tài)地分配實(shí)體,所以Java的編譯器對(duì)空對(duì)象不做檢查。因此,在編寫(xiě)程序時(shí)要避免使用空對(duì)象。 4.5 對(duì)象的引用與實(shí)體第16頁(yè)/共54頁(yè)4.6 成員變量 1.1.類(lèi)變量和實(shí)例變量類(lèi)變量和實(shí)例變量 用關(guān)鍵字用關(guān)鍵字static修飾的成員變量稱(chēng)作修飾的成員變量稱(chēng)作靜態(tài)變量靜態(tài)變量或或類(lèi)變量類(lèi)變量, 而而沒(méi)有使用沒(méi)有使用static修飾的成員變量稱(chēng)作實(shí)例修飾的成員變量稱(chēng)作實(shí)例變量變量。例如
14、,下述A類(lèi)中,x是實(shí)例變量,而y是類(lèi)變量。 class A float x; static int y; 類(lèi)變量是與類(lèi)相關(guān)聯(lián)的數(shù)據(jù)變量,也就是說(shuō),類(lèi)變量是和該類(lèi)所創(chuàng)建的所有對(duì)象相關(guān)聯(lián)的變量,改變其中一個(gè)對(duì)象的這個(gè)類(lèi)變量就同時(shí)改變了其它對(duì)象的這個(gè)類(lèi)變量。也就是說(shuō)對(duì)象共對(duì)象共享類(lèi)變量享類(lèi)變量。類(lèi)變量不僅可以通過(guò)某個(gè)對(duì)象訪(fǎng)問(wèn)也可以直接通過(guò)類(lèi)名訪(fǎng)問(wèn)可以直接通過(guò)類(lèi)名訪(fǎng)問(wèn)。實(shí)例變量?jī)H僅是和相應(yīng)的對(duì)象關(guān)聯(lián)的變量,也就是說(shuō),不同對(duì)象的實(shí)例變量互不相同,即分配不同的內(nèi)存空間,改變其中一個(gè)對(duì)象的實(shí)例變量不會(huì)影響其它對(duì)象的這個(gè)實(shí)例變量。實(shí)例變量必須實(shí)例變量必須通過(guò)對(duì)象訪(fǎng)問(wèn)。通過(guò)對(duì)象訪(fǎng)問(wèn)。演示例子4-2第17頁(yè)/共5
15、4頁(yè)2 2常量常量 如果一個(gè)成員變量修飾為如果一個(gè)成員變量修飾為final,就是常量,常量的名字習(xí)慣用大寫(xiě)字母,例如: final int MAX; final修飾的成員變量不占用內(nèi)存,這意味著在聲明final成員變量時(shí),必須要初始化。對(duì)于final修飾的成員變量,對(duì)象可以操作使用,但不能做更改操作。4.6 成員變量 運(yùn)行例行4-3,給出了常量的用法。第18頁(yè)/共54頁(yè)4.7 方法 類(lèi)體內(nèi)容可以有2種類(lèi)型的成員:成員變量和方法。 其中一部分方法稱(chēng)作構(gòu)造方法,供類(lèi)創(chuàng)建對(duì)象時(shí)使用,用來(lái)給出類(lèi)所創(chuàng)建的對(duì)象的初始狀態(tài)。 另一部分方法可分為實(shí)例方法和類(lèi)方法實(shí)例方法和類(lèi)方法,類(lèi)所創(chuàng)建的對(duì)象可以調(diào)用這些方法
16、形成一定的算法,體現(xiàn)對(duì)象具有某種功能。當(dāng)對(duì)象調(diào)用方法時(shí),方法中出現(xiàn)的成員變量就是指分配給該對(duì)象的成員變量。對(duì)象不可以調(diào)用構(gòu)造方法對(duì)象不可以調(diào)用構(gòu)造方法,構(gòu)造方法是專(zhuān)門(mén)用來(lái)創(chuàng)建對(duì)象的。 方法的定義包括兩部分:方法的定義包括兩部分: 方法聲明和方法體。方法聲明和方法體。 一般格式為:方法聲明部分 方法體的內(nèi)容第19頁(yè)/共54頁(yè)1方法聲明和方法體 最基本的方法聲明包括方法名和方法的返回類(lèi)型方法名和方法的返回類(lèi)型,返回類(lèi)型也簡(jiǎn)稱(chēng)作方法的類(lèi)型。如:如:float area() .4.7 方法方法的命名,必須符合標(biāo)識(shí)符規(guī)定,應(yīng)遵守以下習(xí)慣:1.名字如果使用拉丁字母,首寫(xiě)字母使用小寫(xiě)。 2.如果由多個(gè)單詞組
17、成,從第2個(gè)單詞開(kāi)始的其它單詞的首寫(xiě)字母使用大寫(xiě)。例如 float getTrangleArea() void setCircleRadius(double radius)方法名方法名方法體方法體【修飾符1 修飾符2 】 返回值類(lèi)型 方法名(形式參數(shù)列表) Java語(yǔ)句; ;返回值:方法在執(zhí)行完畢后返還給調(diào)用它的環(huán)境的數(shù)據(jù)返回值類(lèi)型:事先約定的返回值的數(shù)據(jù)類(lèi)型,如無(wú)返回值,必須給出返回值類(lèi)型void第20頁(yè)/共54頁(yè)2方法體的構(gòu)成方法體的構(gòu)成 方法體的內(nèi)容包括變量的定義和合法的Java語(yǔ)句。局部變量:在方法體中聲明的變量以及方法的參數(shù); 說(shuō)明:1. 局部變量?jī)H僅在該方法內(nèi)有效,且從它定義的位置
18、之后開(kāi)始有效。2. 方法的參數(shù)在整個(gè)方法內(nèi)有效 。4.7 方法3實(shí)例方法與類(lèi)方法 除構(gòu)造方法外,其他的方法可分為實(shí)例方法或類(lèi)方法。方法聲明中用關(guān)鍵字用關(guān)鍵字staticstatic修飾的稱(chēng)作類(lèi)方法或修飾的稱(chēng)作類(lèi)方法或靜態(tài)方法靜態(tài)方法,不用static修飾的稱(chēng)作實(shí)例方法。 第21頁(yè)/共54頁(yè)class A float a,b;static float getMaxSqrt(float x,float y) float c; c=max(x,y)*max(x,y); return c; static float max(float x,float y) return xy?x:y; void su
19、m(float x,float y) a=max(x,y); b=min(x,y); 靜態(tài)方法靜態(tài)方法float min(float x,float y) return xb?a:b; class Example4_4 public static void main(String args) double max=Computer.max(12,45); /類(lèi)名調(diào)用類(lèi)方法 第23頁(yè)/共54頁(yè)4.7 方法【修飾符修飾符1 修飾符修飾符2 】 返回值類(lèi)型返回值類(lèi)型 方法名方法名(形式參數(shù)列表形式參數(shù)列表) Java語(yǔ)句;語(yǔ)句; 形式參數(shù):在方法被調(diào)用時(shí)用于接收外界輸入的數(shù)據(jù) 實(shí)參:調(diào)用方法時(shí)實(shí)際傳
20、給方法的數(shù)據(jù) 4參數(shù)傳值 當(dāng)方法被調(diào)用時(shí),如果方法有參數(shù),參數(shù)必須要實(shí)例化,即參數(shù)變量必須有具體的值。 在Java中,方法的所有參數(shù)都是“傳值”的,也就是說(shuō),方法中參數(shù)變量的值是調(diào)用者指定的值的拷貝。如果向方法的int型參數(shù)x傳遞一個(gè)int值,那么參數(shù)x得到的值是傳遞值的拷貝。方法如果改變參數(shù)的值,不會(huì)影響向參數(shù)“傳值”的變量的值。 (1)基本數(shù)據(jù)類(lèi)型參數(shù)的傳值:傳遞的是該數(shù)據(jù)值本身;例子4-5 (2)引用類(lèi)型參數(shù)的傳值:傳遞的是對(duì)對(duì)象的引用,而不是對(duì)象本身; 例子4-6第24頁(yè)/共54頁(yè)上節(jié)回顧1.類(lèi)變量和實(shí)例變量 用關(guān)鍵字static修飾的成員變量稱(chēng)作靜態(tài)變量或類(lèi)變量, 而沒(méi)有使用stat
21、ic修飾的成員變量稱(chēng)作實(shí)例變量。例如,下述A類(lèi)中,x是實(shí)例變量,而y是類(lèi)變量。 class A float x; static int y; 成員變量:成員變量:類(lèi)變量不僅可以通過(guò)某個(gè)對(duì)象訪(fǎng)問(wèn)也可以直接通過(guò)類(lèi)名訪(fǎng)問(wèn)類(lèi)變量不僅可以通過(guò)某個(gè)對(duì)象訪(fǎng)問(wèn)也可以直接通過(guò)類(lèi)名訪(fǎng)問(wèn)實(shí)例變量必須通過(guò)對(duì)象訪(fǎng)問(wèn)。實(shí)例變量必須通過(guò)對(duì)象訪(fǎng)問(wèn)。第25頁(yè)/共54頁(yè)上節(jié)回顧方法:方法:方法聲明部分 方法體的內(nèi)容用關(guān)鍵字static修飾的稱(chēng)作類(lèi)方法或靜態(tài)方法,不用static修飾的稱(chēng)作實(shí)例方法。方法調(diào)用:(1)實(shí)例方法必須通過(guò)對(duì)象來(lái)調(diào)用(2)類(lèi)方法可以通過(guò)類(lèi)名調(diào)用,也可以通過(guò)對(duì)象調(diào)用參數(shù)傳遞:(1)基本數(shù)據(jù)類(lèi)型參數(shù)的傳值:傳遞
22、的是該數(shù)據(jù)值本身; (2)引用類(lèi)型參數(shù)的傳值:傳遞的是對(duì)對(duì)象的引用,而不是對(duì)象本身;【修飾符1 修飾符2 】 返回值類(lèi)型 方法名(形式參數(shù)列表) Java語(yǔ)句; ;第26頁(yè)/共54頁(yè)4.8 方法的重載 方法的重載方法的重載是指一個(gè)類(lèi)中可以定義有相同的名字,但參數(shù)不同的多個(gè)方法。即或者是參數(shù)的個(gè)數(shù)不同,或者是參數(shù)的類(lèi)型不同。方法的返回類(lèi)型和參數(shù)的名字不參與比較.方法重載是多態(tài)性的一種。調(diào)用時(shí),系統(tǒng)會(huì)根據(jù)不同的參數(shù)表選擇對(duì)應(yīng)的方法調(diào)用時(shí),系統(tǒng)會(huì)根據(jù)不同的參數(shù)表選擇對(duì)應(yīng)的方法 例如:在Person類(lèi)中添加方法:void info()void info(String t)第27頁(yè)/共54頁(yè)構(gòu)造方法的重
23、載與普通方法一樣,構(gòu)造方法也可以重載與普通方法一樣,構(gòu)造方法也可以重載可以根據(jù)不同的構(gòu)造方法創(chuàng)建不同的對(duì)象類(lèi)Person中構(gòu)造方法:Person()id=0;age=20;Person(int _age)id=0;age=_age;Person(int _id,int _age)id=_id;age=_age;第28頁(yè)/共54頁(yè)內(nèi)存分析第29頁(yè)/共54頁(yè)內(nèi)存分析2第30頁(yè)/共54頁(yè)內(nèi)存分析3第31頁(yè)/共54頁(yè)內(nèi)存分析4第32頁(yè)/共54頁(yè)4.9 this關(guān)鍵字 在類(lèi)的方法定義中使用this關(guān)鍵字代表使用該方法的對(duì)象的引用 當(dāng)必須指出當(dāng)前使用方法的對(duì)象是誰(shuí)時(shí)要使用this, 可以出現(xiàn)可以出現(xiàn)在實(shí)例
24、方法和構(gòu)造方法中,但不可以出現(xiàn)在類(lèi)方法中。在實(shí)例方法和構(gòu)造方法中,但不可以出現(xiàn)在類(lèi)方法中。 1在構(gòu)造方法中使用this this關(guān)鍵字可以出現(xiàn)在類(lèi)的構(gòu)造方法中,代表使用該構(gòu)造方法所創(chuàng)建的對(duì)象。2在實(shí)例方法中使用this this關(guān)鍵字可以出現(xiàn)在類(lèi)的實(shí)例方法中,代表使用該方法的當(dāng)前對(duì)象。實(shí)例方法可以操作成員變量。實(shí)際上,當(dāng)成員變量在實(shí)例方法中出現(xiàn)時(shí),默認(rèn)的格式是: this.成員變量; 意思是當(dāng)前對(duì)象的成員變量,如: class A int x; void f() this.x=100; 第33頁(yè)/共54頁(yè)4.9 this關(guān)鍵字 3類(lèi)方法中不可以使用類(lèi)方法中不可以使用this this不能出現(xiàn)在
25、類(lèi)方法中,這是因?yàn)?,?lèi)方法可以通過(guò)類(lèi)名直接調(diào)用,這時(shí),可能還沒(méi)有任何對(duì)象誕生。 4使用this區(qū)分成員變量和局部變量 成員變量在整個(gè)類(lèi)內(nèi)有效,局部變量?jī)H在方法內(nèi)有效。在方法體中聲明的變量以及方法的參數(shù)稱(chēng)作局部變量,方法的參數(shù)在整個(gè)方法內(nèi)有效,方法內(nèi)定義的局部變量從它定義的位置之后開(kāi)始有效。 這時(shí)如果想在該方法內(nèi)使用成員變量,成員變這時(shí)如果想在該方法內(nèi)使用成員變量,成員變量前面的量前面的“this.”就不可以省略,就不可以省略,如果局部變量的名字與成員變量的名字相同,則成員變量被隱藏,即這個(gè)成員變量在這個(gè)方法內(nèi)暫時(shí)失效。class Tra float sideA,sideB,sideC; sta
26、tic int count; void setSide(float sideA,float sideB,float sideC) this.sideA=sideA; this.sideB=sideB; this.sideC=sideC; class Tom int x=188,y; void f() int x=3; y=x; /*y得到的值是3,不是188。如果方法f 中沒(méi)有“int x=3;”語(yǔ)句,y的值將是98.*/*this.sideA、this.sideB、this.sideC就分別表示當(dāng)前對(duì)象的成員變量sideA、sideB、sideC.*/ 第34頁(yè)/共54頁(yè)經(jīng)管院經(jīng)管院信管信管
27、08級(jí)級(jí)信管信管07級(jí)級(jí)計(jì)科院計(jì)科院4.10 包 為便于管理大型軟件系統(tǒng)中數(shù)目眾多的類(lèi),解決類(lèi)的命名沖突問(wèn)題,Java引入包機(jī)制,提供類(lèi)的多重類(lèi)命名空間張張重重張張重重張張重重第35頁(yè)/共54頁(yè)4.10 包 通過(guò)關(guān)鍵字通過(guò)關(guān)鍵字package聲明包語(yǔ)句聲明包語(yǔ)句 package語(yǔ)句作為語(yǔ)句作為java源文件的第一條語(yǔ)句,指明該源文件的第一條語(yǔ)句,指明該文件中定義的類(lèi)所在的包文件中定義的類(lèi)所在的包(若缺省該語(yǔ)句,則指定為無(wú)若缺省該語(yǔ)句,則指定為無(wú)名包名包) 格式為:格式為: package 包名包名; java編譯器編譯器把包對(duì)應(yīng)于文件系統(tǒng)的目錄管理把包對(duì)應(yīng)于文件系統(tǒng)的目錄管理,package語(yǔ)
28、句中,用語(yǔ)句中,用“.”來(lái)指明包來(lái)指明包(目錄目錄)的層次,例的層次,例如使用語(yǔ)句如使用語(yǔ)句 package tom.jiafei; 則該文件中所有的類(lèi)位于則該文件中所有的類(lèi)位于.tomjiafei目錄下目錄下注意:包所對(duì)應(yīng)的目錄結(jié)構(gòu)必須已經(jīng)存在,否則注意:包所對(duì)應(yīng)的目錄結(jié)構(gòu)必須已經(jīng)存在,否則class字節(jié)碼字節(jié)碼文件無(wú)法運(yùn)行。文件無(wú)法運(yùn)行。 如在 c:1000tomjiafei。要將源文件編譯后得到的全部字節(jié)碼文件拷貝到目錄c:1000tomjiafei中;如果你事先將源文件保存到c:1000tomjiafei中,然后編譯源文件,那么生成的字節(jié)碼文件就直接保存到當(dāng)前目錄中了演示演示4-10建
29、議:建議:實(shí)際項(xiàng)目中用自己公司的域名倒置作為包名。實(shí)際項(xiàng)目中用自己公司的域名倒置作為包名。如如”的倒置的倒置“做包名做包名使用參數(shù)使用參數(shù)“d”編譯源文件,指定生成的字節(jié)嗎文件所在的目錄。編譯源文件,指定生成的字節(jié)嗎文件所在的目錄。如:如:javac d F:tsinghua1000 MyFile.java第36頁(yè)/共54頁(yè)JDK包介紹 java.lang包含一些java語(yǔ)言的核心類(lèi),如String、Math、Integer、System和Thread,提供常用功能 java.awt包含了構(gòu)成抽象窗口工具包(abstract window toolkits)的多個(gè)類(lèi),這些類(lèi)被用來(lái)構(gòu)建和管理應(yīng)用
30、程序的圖形用戶(hù)界面(GUI) java.applet包含applet運(yùn)行所需的一些類(lèi) 包含執(zhí)行與網(wǎng)絡(luò)相關(guān)的操作的類(lèi) java.io包含能提供多種輸入/輸出功能的類(lèi) java.util包含一些使用工具類(lèi),如定義系統(tǒng)特性,使用與日期日歷相關(guān)的函數(shù)第37頁(yè)/共54頁(yè) 4.11 import語(yǔ)句 使用使用import import 語(yǔ)句可以引入包中的類(lèi)。語(yǔ)句可以引入包中的類(lèi)。在編寫(xiě)源文件時(shí), 除了自己編寫(xiě)類(lèi)外,我們經(jīng)常需要使用Java提供的許多類(lèi),這些類(lèi)可能在不同的包中。在學(xué)習(xí)Java語(yǔ)言時(shí),使用已經(jīng)存在的類(lèi),避免一切從頭做起,這是面向?qū)ο缶幊痰囊粋€(gè)重要方面。 1 .使用類(lèi)庫(kù)中的類(lèi)使用類(lèi)庫(kù)中的類(lèi) 為了
31、能使用Java提供給我們的類(lèi),我們可以使用import語(yǔ)句來(lái)引入包中類(lèi)。在一個(gè)Java源程序中可以有多個(gè)import語(yǔ)句,它們它們必須寫(xiě)在必須寫(xiě)在package語(yǔ)句(假如有語(yǔ)句(假如有package語(yǔ)句的話(huà))和源文件中類(lèi)語(yǔ)句的話(huà))和源文件中類(lèi)的定義之間。的定義之間。 引用一個(gè)包中全部的類(lèi):引用一個(gè)包中全部的類(lèi):import java.awt.*;只引入包中某一個(gè)類(lèi):只引入包中某一個(gè)類(lèi): public class Example4_11 public static void main(String args) Date date=new Date();本地機(jī)器的時(shí)間:n%s,date); 注意:
32、注意:java.lang包中的類(lèi)不用引入,由系統(tǒng)自動(dòng)完成包中的類(lèi)不用引入,由系統(tǒng)自動(dòng)完成第38頁(yè)/共54頁(yè) 4.11 import語(yǔ)句2使用自定義包和無(wú)名包中的類(lèi)使用自定義包和無(wú)名包中的類(lèi)v 可以使用import 語(yǔ)句引入自定義包中的類(lèi)。如: v 可以對(duì)單獨(dú)的一個(gè)類(lèi)進(jìn)行編譯,生成字節(jié)碼文件然后供其它類(lèi)使用。 如引用的源文件沒(méi)有包名,可直接將其字節(jié)碼文件和應(yīng)用程序放如引用的源文件沒(méi)有包名,可直接將其字節(jié)碼文件和應(yīng)用程序放在同一目錄在同一目錄 如引用的源文件有包名,如:如引用的源文件有包名,如:tom.jiafei;可在應(yīng)用程序所在目錄可在應(yīng)用程序所在目錄下建立其包對(duì)應(yīng)的子目錄結(jié)構(gòu)下建立其包對(duì)應(yīng)的
33、子目錄結(jié)構(gòu)tomjiafei,然后將其字節(jié)碼文件,然后將其字節(jié)碼文件放在其中放在其中 如果引用的源文件編譯后的字節(jié)碼文件存放在其他目錄中,需在如果引用的源文件編譯后的字節(jié)碼文件存放在其他目錄中,需在classpath中指明其位置中指明其位置表示加載應(yīng)用程序當(dāng)前目錄中的無(wú)名包類(lèi)表示加載應(yīng)用程序當(dāng)前目錄中的無(wú)名包類(lèi)第39頁(yè)/共54頁(yè)3避免類(lèi)名混淆 Java運(yùn)行環(huán)境總是先到程序所在目錄中尋找程序所使用的類(lèi),然后加載到內(nèi)存。如果在當(dāng)前目錄沒(méi)有發(fā)現(xiàn)所需要的類(lèi),就到import語(yǔ)句所指的包中查找。 4.11 import語(yǔ)句v區(qū)分無(wú)包名和有包名的類(lèi):區(qū)分無(wú)包名和有包名的類(lèi):有包名的類(lèi)不能省略包名有包名的類(lèi)
34、不能省略包名 Triangle a1=new Triangle();v區(qū)分有包名的類(lèi)區(qū)分有包名的類(lèi):同時(shí)引入了兩個(gè)包中同名的類(lèi),都不能省略包名同時(shí)引入了兩個(gè)包中同名的類(lèi),都不能省略包名 第40頁(yè)/共54頁(yè)4.10-4.11 package,import總結(jié) 如果想將一個(gè)類(lèi)放入包中,在這個(gè)類(lèi)源文件第一句話(huà)寫(xiě)如果想將一個(gè)類(lèi)放入包中,在這個(gè)類(lèi)源文件第一句話(huà)寫(xiě)package 必須保證該類(lèi)的必須保證該類(lèi)的class字節(jié)碼文件位于正確目錄下字節(jié)碼文件位于正確目錄下 該類(lèi)的源碼可能會(huì)產(chǎn)生影響該類(lèi)的源碼可能會(huì)產(chǎn)生影響 刪除或轉(zhuǎn)移到另外的目錄刪除或轉(zhuǎn)移到另外的目錄 另外的類(lèi)想訪(fǎng)問(wèn)的話(huà):另外的類(lèi)想訪(fǎng)問(wèn)的話(huà): 寫(xiě)全
35、名寫(xiě)全名 訪(fǎng)問(wèn)位于同一個(gè)包中的類(lèi)不需要引入訪(fǎng)問(wèn)位于同一個(gè)包中的類(lèi)不需要引入 引入引入 * 具體類(lèi)名具體類(lèi)名 執(zhí)行一個(gè)類(lèi)需要寫(xiě)全包名執(zhí)行一個(gè)類(lèi)需要寫(xiě)全包名第41頁(yè)/共54頁(yè)4.12 訪(fǎng)問(wèn)權(quán)限 Java權(quán)限修飾符public protected private置于類(lèi)的成員定義前,用來(lái)限定其他對(duì)象對(duì)該類(lèi)對(duì)象成員(成員變量和方法)的訪(fǎng)問(wèn)權(quán)限. 1 1私有變量和私有方法私有變量和私有方法 用關(guān)鍵字private修飾的成員變量和方法被稱(chēng)為私有變量和私有方法。 對(duì)于私有成員變量或方法,只有在本類(lèi)中創(chuàng)建該類(lèi)的對(duì)象時(shí),這個(gè)對(duì)象才能訪(fǎng)問(wèn)自己的private成員變量和類(lèi)中的private方法。運(yùn)行例4-13,例4-
36、14 class A private float weight; private float f(float a,float b);class B void g(); A a=new A(); a.weight=23f;a.f(3f,4f);/非法/非法第42頁(yè)/共54頁(yè) 2 2共有變量和共有方法共有變量和共有方法 用public修飾的成員變量和方法被稱(chēng)為共有變量和共有方法,如: class A public float weight; /weight被修飾為public的float型變量。 public float f(float a,float b) /方法 f是public方法。 4.1
37、2 訪(fǎng)問(wèn)權(quán)限 class B void g() A a=new A(); a.weight=23f; /合法。 a.f(3,4); /合法。 在任何一個(gè)類(lèi)中用另一個(gè)類(lèi)A創(chuàng)建了一個(gè)對(duì)象后,該對(duì)象能訪(fǎng)問(wèn)自己的public變量和類(lèi)A中的public方法第43頁(yè)/共54頁(yè) 3 3友好變量和友好方法友好變量和友好方法 不用private、public 、protected修飾符的成員變量和方法被稱(chēng)為友好變量和友好方法友好變量和友好方法,如: class A float weight; /weight是友好的float型變量。 float f(float a,float b) /方法 f是友好方法。 4.
38、12 訪(fǎng)問(wèn)權(quán)限 假如B與A是同一個(gè)包中的類(lèi),那么,下述B類(lèi)中的a.weight、a.f(3,4)都是合法的。 class B void g() A cat=new A(); a.weight=23f; /合法。 a.f(3,4); /合法。 第44頁(yè)/共54頁(yè) 4 4受保護(hù)的成員變量和方法受保護(hù)的成員變量和方法 用protected修飾的成員變量和方法被稱(chēng)為受保護(hù)的成員變量和受保護(hù)的方法,如: class A protected float weight; /weight被修飾為public的float型變量。 protected float f(float a,float b) /方法 f是
39、public方法。 4.12 訪(fǎng)問(wèn)權(quán)限 假如B與A是同一個(gè)包中的類(lèi),那么,B類(lèi)中的a.weight、a.f(3,4)都是合法的。 class B void g() Tom a=new Tom(); a.weight=23f; /合法。 a.f(3,4); /合法。 第45頁(yè)/共54頁(yè)5public類(lèi)與友好類(lèi)類(lèi)與友好類(lèi) 類(lèi)聲明時(shí),如果關(guān)鍵字class前面加上public關(guān)鍵字,就稱(chēng)這樣的是一個(gè)public類(lèi),不能用protected和private修飾類(lèi)。如: public class A 可以在任何另外一個(gè)類(lèi)中,使用public類(lèi)創(chuàng)建對(duì)象。如果一個(gè)類(lèi)不加public修飾,如: class A
40、4.12 訪(fǎng)問(wèn)權(quán)限 6關(guān)于構(gòu)造方法 private、public 、protected修飾符的意義也同樣適合于構(gòu)造方法。如果一個(gè)類(lèi)沒(méi)有明確地聲明構(gòu)造方法,那么public類(lèi)的默認(rèn)構(gòu)造方法是public的,友好類(lèi)的默認(rèn)構(gòu)造方法是友好的。 需要注意的是,如果一個(gè)public類(lèi)定義聲明的構(gòu)造方法中沒(méi)有public的,那么在另外一個(gè)類(lèi)中使用該類(lèi)創(chuàng)建對(duì)象時(shí),使用的構(gòu)造方法就不是 public的,創(chuàng)建對(duì)象就受到一定的限制。第46頁(yè)/共54頁(yè)4.12 訪(fǎng)問(wèn)權(quán)限 無(wú)無(wú)第47頁(yè)/共54頁(yè)4.13 對(duì)象的組合 一個(gè)類(lèi)可以把對(duì)象作為自己的成員變量,如果用這樣的類(lèi)創(chuàng)建對(duì)象,那么該對(duì)象中就會(huì)有其它對(duì)象,也就是說(shuō)該對(duì)象將
41、其他對(duì)象作為自己的組成部分(這就是人們常說(shuō)的Has-A),或者說(shuō)該對(duì)象是由幾個(gè)對(duì)象組合而成 .例例4-15第48頁(yè)/共54頁(yè)4.14 基本類(lèi)型數(shù)據(jù)的類(lèi)包裝 Java的基本數(shù)據(jù)類(lèi)型包括: byte、int、short、long、float、double、char。Java同時(shí)也提供了基本數(shù)據(jù)類(lèi)型相關(guān)的類(lèi)基本數(shù)據(jù)類(lèi)型相關(guān)的類(lèi),實(shí)現(xiàn)了對(duì)基本數(shù)據(jù)實(shí)現(xiàn)了對(duì)基本數(shù)據(jù)類(lèi)型的封裝類(lèi)型的封裝。這些類(lèi)在java.lang包中,分別是: Byte、Integer、Short、Long、Float、Double和Character類(lèi)。 1.Double和Float類(lèi) Double類(lèi)和Float類(lèi)實(shí)現(xiàn)了對(duì)double和float基本型數(shù)據(jù)的類(lèi)包裝。 可以使用Double類(lèi)的構(gòu)造方法:Double (double num) 創(chuàng)建一個(gè)Double類(lèi)型的對(duì)象;使用Float類(lèi)的構(gòu)造方法:Float (float num) 創(chuàng)建一個(gè)Float類(lèi)型的對(duì)象。Double對(duì)象調(diào)用第49頁(yè)/共54頁(yè)包裝類(lèi)常見(jiàn)方法2.Byte、Integer、Short和Long對(duì)象分別調(diào)用 byteValue ()、intValue()、shortValue ()和longValue ()方法可以返回該對(duì)象含有的基本型數(shù)據(jù)。 方法 public
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《翡翠培訓(xùn)資料》課件
- 《證券買(mǎi)賣(mài)技巧教案》課件
- 《證券基金銷(xiāo)售培訓(xùn)》課件
- 單位管理制度集粹匯編員工管理篇
- 單位管理制度分享大全【人力資源管理篇】
- 《社區(qū)工作實(shí)務(wù)》課件
- 單位管理制度范例選集【人力資源管理篇】十篇
- 單位管理制度范例合集職工管理十篇
- 單位管理制度呈現(xiàn)合集【人事管理】十篇
- 寒假自習(xí)課 25春初中地理八年級(jí)下冊(cè)人教版教學(xué)課件 第八章 第二節(jié) 干旱的寶地-塔里木盆地 第2課時(shí) 油氣資源的開(kāi)發(fā)
- 老年病及老年綜合征中醫(yī)證治概要
- 三年級(jí)上冊(cè)數(shù)學(xué)說(shuō)課稿- 2.2 看一看(二)-北師大版
- 超星爾雅學(xué)習(xí)通《西廂記》賞析(首都師范大學(xué))網(wǎng)課章節(jié)測(cè)試答案
- 切削液的配方
- 塑料門(mén)窗及型材功能結(jié)構(gòu)尺寸
- 2023-2024學(xué)年湖南省懷化市小學(xué)數(shù)學(xué)五年級(jí)上冊(cè)期末深度自測(cè)試卷
- GB 7101-2022食品安全國(guó)家標(biāo)準(zhǔn)飲料
- 超實(shí)用的發(fā)聲訓(xùn)練方法
- 《第六課 從傳統(tǒng)到現(xiàn)代課件》高中美術(shù)湘美版美術(shù)鑒賞
- 英語(yǔ)四六級(jí)講座課件
- Unit 3 On the move Understanding ideas(Running into a better life)課件- 高一上學(xué)期英語(yǔ)外研版(2019)必修第二冊(cè)
評(píng)論
0/150
提交評(píng)論