




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 本章導(dǎo)讀1. 類(lèi)聲明和類(lèi)體2. 類(lèi)體的構(gòu)成3.構(gòu)造方法與對(duì)象的創(chuàng)立4. 對(duì)象的引用與實(shí)體5. 成員變量6. 方法 第4章 類(lèi)與對(duì)象7. 方法重載8. this關(guān)鍵字9. 包10. import 語(yǔ)句11. 訪問(wèn)權(quán)限12. 根本類(lèi)型數(shù)據(jù)的類(lèi)包裝13. 反編譯和文檔生成器序面向?qū)ο缶幊蹋悍庋b,繼承,多態(tài)性:一種操作名稱的多態(tài)性,同名多操作。一種是和繼承有關(guān)的多態(tài)性:指同一個(gè)操作被不同類(lèi)型對(duì)象掉用時(shí)產(chǎn)生不同的行為。4.1 類(lèi)聲明和類(lèi)體 類(lèi)是組成Java程序的根本要素。類(lèi)封裝了一類(lèi)對(duì)象的狀態(tài)和方法。類(lèi)是用來(lái)定義對(duì)象的模板??梢杂妙?lèi)創(chuàng)立對(duì)象,當(dāng)使用一個(gè)類(lèi)創(chuàng)立了一個(gè)對(duì)象時(shí),我們也說(shuō)給出了這個(gè)類(lèi)的一個(gè)實(shí)例
2、。 在語(yǔ)法上,類(lèi)由兩局部構(gòu)成:類(lèi)聲明和類(lèi)體。根本格式為: class 類(lèi)名 類(lèi)體的內(nèi)容 class是關(guān)鍵字,用來(lái)定義類(lèi)。“class 類(lèi)名是類(lèi)的聲明局部,類(lèi)名必須是合法的Java標(biāo)識(shí)符。兩個(gè)大括號(hào)“、“以及之間的內(nèi)容稱作類(lèi)體。 以下是兩個(gè)類(lèi)聲明的例子。 class Dog class 機(jī)動(dòng)車(chē) 類(lèi)的名字不能是Java中的關(guān)鍵字,要符合標(biāo)識(shí)符規(guī)定,即名字可以由字母、下劃線、數(shù)字或美元符號(hào)組成,并且第一個(gè)字符不能是數(shù)字。但給類(lèi)命名時(shí),最好遵守以下習(xí)慣: 1如果類(lèi)名使用拉丁字母,那么名字的首字母使用 大寫(xiě)字母,如Hello、Time、,People 等。 2類(lèi)名最好容易識(shí)別、見(jiàn)名知意。當(dāng)類(lèi)名由幾個(gè)“單
3、詞復(fù)合而成時(shí),每個(gè)單詞的首寫(xiě)字母使用大寫(xiě),如BeijingTime、AmericanGame、HelloChina等。 返回4.2 類(lèi)體的構(gòu)成 類(lèi)體內(nèi)容可以有2種類(lèi)型的成員: 1成員變量:通過(guò)變量聲明定義的變量,稱作成員變量或域,用來(lái)刻畫(huà)類(lèi)創(chuàng)立的對(duì)象的屬性。將在后面的第3節(jié)詳細(xì)地討論成員變量。 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)用這些方法操作成員變量形成一定的算法,表達(dá)對(duì)象具有某種功能。 下面是一個(gè)類(lèi)名為“機(jī)動(dòng)車(chē)的類(lèi),類(lèi)體內(nèi)容的變量定義局部定義了2個(gè)float類(lèi)
4、型的變量:“weight、“height和一個(gè)int型變量“speed;方法定義局部定義了3個(gè)方法:“changSpeed、“getWeight和“getHeight。 成員變量的類(lèi)型可以是Java中的任何一種數(shù)據(jù)類(lèi)型,包括前面學(xué)習(xí)過(guò)的根本類(lèi)型:整型、浮點(diǎn)型、字符型、數(shù)組以及后面要學(xué)習(xí)的對(duì)象及接口。 成員變量在整個(gè)類(lèi)內(nèi)都有效,與它在類(lèi)體中書(shū)寫(xiě)的先后位置無(wú)關(guān),例如,前述的機(jī)動(dòng)車(chē)類(lèi)也可以寫(xiě)成: class 機(jī)動(dòng)車(chē) int speed; /變量定義局部。 float weight,height; /變量定義局部。 void changSpeed(int newSpeed) /方法定義。 speed=
5、newSpeed; float getWeight() /方法定義。 return weight; float getHeight() /方法定義。 return height; 在定義類(lèi)的成員變量時(shí)可以同時(shí)賦予初值,說(shuō)明類(lèi)所創(chuàng)立的對(duì)象的初始狀態(tài)。需要注意的是。對(duì)成員變量的操作只能放在方法中,方法可以對(duì)成員變量進(jìn)行操作形成算法,如:class A int a=9; float b=12 .6f; void f() a=12; b=12.56f;返回但是不可以這樣做:class A int a; float b; a=12; /非法 b=12.56f; /非法void f() 返回 因?yàn)?,a=1
6、2是賦值語(yǔ)句,不是數(shù)據(jù)的聲明。類(lèi)的成員類(lèi)型中可以有數(shù)據(jù)和方法,即數(shù)據(jù)的定義和方法的定義,但沒(méi)有語(yǔ)句,語(yǔ)句必須放在方法中。 返回4.3構(gòu)造方法與對(duì)象的創(chuàng)立 類(lèi)中有一局部方法稱作構(gòu)造方法,類(lèi)創(chuàng)立對(duì)象時(shí)需使用構(gòu)造方法,以便給類(lèi)所創(chuàng)立的對(duì)象一個(gè)合理的初始狀態(tài)。構(gòu)造方法是一種特殊方法,它的名字必須與它所在的類(lèi)的名字完全相同,并且不返回任何數(shù)據(jù)類(lèi)型,即它是void型,但void必須省略不寫(xiě)。Java允許一個(gè)類(lèi)中有假設(shè)干個(gè)構(gòu)造方法,但這些構(gòu)造方法的參數(shù)必須不同,即或者是參數(shù)的個(gè)數(shù)不同,或者是參數(shù)的類(lèi)型不同。下面的Rect類(lèi)有兩個(gè)構(gòu)造方法: class Rect double sizdA,siddB; Rec
7、t() /無(wú)參數(shù)構(gòu)造方法。 Rect(double a,double b) /有參數(shù)構(gòu)造方法。 sideA=a; sideB=b; double computerArea() return sideA*sideB; double computerGirth() return (sizeA+sideB)*2; 當(dāng)使用一個(gè)類(lèi)創(chuàng)立了一個(gè)對(duì)象時(shí),我們也說(shuō)給出了這個(gè)類(lèi)的一個(gè)實(shí)例。創(chuàng)立一個(gè)對(duì)象包括對(duì)象的聲明和為對(duì)象分配成員變量?jī)蓚€(gè)步驟。 1對(duì)象的聲明。 一般格式為: 類(lèi)的名字 對(duì)象名字; 如: Rect rectangleOne; rectangleOne null2為聲明的對(duì)象分配成員變量 使用new運(yùn)
8、算符和類(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ù)的,你一定還記得構(gòu)造方法的名字必須和類(lèi)名相同這一規(guī)定,上述的Rect類(lèi)提供了2個(gè)構(gòu)造方法,下面都是合法的創(chuàng)立對(duì)象的語(yǔ)句: rectangleOne =new Rect(); 或 rectangleOne =new Rect(10,20); 如果類(lèi)里定義了一個(gè)或多個(gè)構(gòu)造方法,那么Java不提 供默認(rèn)的構(gòu)造方法。如果上述Rect只提供一個(gè)帶參數(shù)的構(gòu)造方法,代碼: rectangleOne =new Rect(); 創(chuàng)立對(duì)象是非法的。 創(chuàng)立對(duì)象的代碼: rectangleOne =new
9、Rect(10,20); 會(huì)實(shí)現(xiàn)下述兩件事: 1為成員變量分配內(nèi)存空間,然后執(zhí)行構(gòu)造方法中的語(yǔ)句 。 2給出一個(gè)信息,已確保這些成員變量是屬于對(duì)象 rectangleOne的 。 創(chuàng)立對(duì)象就是指為它分配成員變量,并獲得一個(gè)引用,以確保這些成員變量由它來(lái)“操作管理。為對(duì)象分配成員變量后,內(nèi)存模型由聲明對(duì)象時(shí)的模型圖4.1,變成如圖4.2所示,箭頭示意對(duì)象可以操作這些屬于自己的成員變量。圖4.2 分配實(shí)體后的對(duì)象sideBsideA 20 100 xAA11RectangleOne3創(chuàng)立多個(gè)不同的對(duì)象 一個(gè)類(lèi)通過(guò)使用new運(yùn)算符可以創(chuàng)立多個(gè)不同的對(duì)象,這些對(duì)象將被分配不同的內(nèi)存空間,因此,改變其中
10、一個(gè)對(duì)象的狀態(tài)不會(huì)影響其它對(duì)象的狀態(tài)。例如,我們使用前面的Rect類(lèi)創(chuàng)立兩個(gè)對(duì)象:rectangleOne、rectangleTwo。 rectangleOne =new Rect(10,20); rectangleTwo =new Rect(33,66); 當(dāng)創(chuàng)立對(duì)象rectangleOne時(shí),Rect類(lèi)中的成員變量sizeA、sizeB被分配內(nèi)存空間,并返回一個(gè)引用給ectangleOne; 當(dāng)再創(chuàng)立一個(gè)對(duì)象rectangleTwo時(shí),Rect類(lèi)中的成員 變量sizeA、sizeB再一次被分配內(nèi)存空間,并返回一個(gè) 引用給rectangleTwo 。內(nèi)存模型如圖4.3所示。 sideBsid
11、eA 20 100 xAA11rectangleOne圖4.3 創(chuàng)建多個(gè)對(duì)象sideBsideA 66 330 xBB42rectangleTwo 4使用對(duì)象 對(duì)象不僅可以操作自己的變量改變狀態(tài),而且還擁有了使用創(chuàng)立它的那個(gè)類(lèi)中的方法的能力,對(duì)象通過(guò)使用這些方法可以產(chǎn)生一定的行為。 通過(guò)使用運(yùn)算符“.,對(duì)象可以實(shí)現(xiàn)對(duì)自己的變量訪問(wèn) 和方法的調(diào)用。 1對(duì)象操作自己的變量對(duì)象的屬性 2對(duì)象調(diào)用類(lèi)中的方法對(duì)象的功能 下面例子1中,“Lader類(lèi)創(chuàng)立了2個(gè)對(duì)象:laderOne, laderTwo。 返回class Lader double above,bottom,height; Lader(dou
12、ble a,double b,double h) above=a; bottom=b; height=h; public void setAbove(double a) above=a; public void setBottom(double b) bottom=b; public void setHeight(double h) height=h; double computeArea() return (above+bottom)*height/2.0; public class Example public static void main(String args) double ar
13、ea1,area2=0; Lader laderOne,laderTwo; laderOne=new Lader(5,10,12); laderTwo=new Lader(10,20.45,20); area1=laderOne puteArea(); area2=laderTwo puteArea(); System.out.printf(laderOne和laderTwo的面積分別是:%n%f,%fn,area1,area2); laderOne.setAbove(10); laderTwo.setBottom(40); area1=laderOne puteArea(); area2=l
14、aderTwo puteArea(); System.out.printf(laderOne和laderTwo的面積分別是:%n%f,%fn,area1,area2); 4.4 對(duì)象的引用與實(shí)體 我們已經(jīng)知道,當(dāng)用類(lèi)創(chuàng)立一個(gè)對(duì)象時(shí),成員變量被分配內(nèi)存空間,這些內(nèi)存空間稱做該對(duì)象的實(shí)體或變量,而對(duì)象中存放著引用,以確保這些變量由該對(duì)象操作使用。因此,如果兩個(gè)對(duì)象有相同的引用,那么就具有同樣的實(shí)體。 假設(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);如果程序中使用了如下的賦值語(yǔ)句: t1=
15、t2;那么:內(nèi)存中引用t2,t1都指向了t2, t1無(wú)引用。 Java具有“垃圾收集機(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的成員變量實(shí)體所占有的內(nèi)存就會(huì)被釋放。 沒(méi)有實(shí)體的對(duì)象稱作空對(duì)象??諏?duì)象不能使用,即不能讓一個(gè)空對(duì)象去調(diào)用方法產(chǎn)生行為。假設(shè)程序中使用了空對(duì)象,程序在運(yùn)行時(shí)會(huì)出現(xiàn)異常:NullPointerException。由于對(duì)象是動(dòng)態(tài)地分配實(shí)體,所以Java的編譯器對(duì)空對(duì)象不做檢
16、查。因此,在編寫(xiě)程序時(shí)要防止使用空對(duì)象。 返回4.5 成員變量 用關(guān)鍵字static修飾的成員變量稱作靜態(tài)變量或類(lèi)變量, 而沒(méi)有使用static修飾的成員變量稱作實(shí)例變量。例如,下述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)變量。 因此,類(lèi)變量不僅可以通過(guò)某個(gè)對(duì)象訪問(wèn)也可以直接通過(guò)類(lèi)名訪問(wèn)。 實(shí)例變量?jī)H僅是和相應(yīng)的對(duì)象關(guān)聯(lián)的變量,也就是說(shuō),不同對(duì)象的實(shí)例變量互不相同,即分配不同的內(nèi)存空間,改變其中一
17、個(gè)對(duì)象的實(shí)例變量不會(huì)影響其它對(duì)象的這個(gè)實(shí)例變量。實(shí)例變量必須通過(guò)對(duì)象訪問(wèn)。 下面例子2中,兩個(gè)“ Lader對(duì)象共享bottom。效果如圖4.7 class Lader float above,height; /實(shí)例變量。 static float bottom; /類(lèi)變量。 void setAbove(float a) above=a; void setBottom(float b) bottom=b; float getAbove() return above; float getBottom() return bottom; class Example public static voi
18、d main(String args) Lader.bottom=60; /Lader的字節(jié)碼被加載到內(nèi)存,通過(guò)類(lèi)名操作類(lèi)變量。 System.out.println(現(xiàn)在所有Lader對(duì)象的bottom都是+Lader.bottom); Lader laderOne,laderTwo; laderOne=new Lader(); laderTwo=new Lader(); System.out.println(laderOne的bottom:+laderOne.getBottom(); System.out.println(laderTwo的bottom:+laderTwo.getBotto
19、m(); laderOne.setAbove(11); laderTwo.setAbove(22); laderTwo.setBottom(100); System.out.println(現(xiàn)在所有Lader對(duì)象的bottom都是+Lader.bottom); System.out.println(laderOne的above:+laderOne.getAbove(); System.out.println(laderTwo的above:+laderTwo.getAbove(); 2常量 如果一個(gè)成員變量修飾為final,就是常量,常量的名字習(xí)慣用大寫(xiě)字母,例如: final int MAX;
20、 final修飾的成員變量不占用內(nèi)存,這意味著在聲明final成員變量時(shí),必須要初始化。對(duì)于final修飾的成員變量,對(duì)象可以操作使用,但不能做更改操作。下面的例子給出了常量的用法。效果如圖4.9 class Tom final int MAX=100; static final int MIN=20; class Example public static void main(String args) System.out.println(Tom.MIN); Tom tom=new Tom(); int x=0; x=Tom.MIN+tom.MAX; System.out.println(x
21、); 返回4.6 方法 我們已經(jīng)知道,類(lèi)體內(nèi)容可以有2種類(lèi)型的成員:成員變量和方法。其中一局部方法稱作構(gòu)造方法,供類(lèi)創(chuàng)立對(duì)象時(shí)使用,用來(lái)給出類(lèi)所創(chuàng)立的對(duì)象的初始狀態(tài)。另一局部方法可分為實(shí)例方法和類(lèi)方法,類(lèi)所創(chuàng)立的對(duì)象可以調(diào)用這些方法形成一定的算法,表達(dá)對(duì)象具有某種功能。當(dāng)對(duì)象調(diào)用方法時(shí),方法中出現(xiàn)的成員變量就是指分配給該對(duì)象的成員變量。對(duì)象不可以調(diào)用構(gòu)造方法,構(gòu)造方法是專門(mén)用來(lái)創(chuàng)立對(duì)象的。 方法的定義包括兩局部:方法聲明和方法體。一般格式為:方法聲明局部 方法體的內(nèi)容1方法聲明和方法體最根本的方法聲明包括方法名和方法的返回類(lèi)型,返回類(lèi)型也簡(jiǎn)稱作方法的類(lèi)型。如:float area() . 方法
22、的名字必須符合標(biāo)識(shí)符規(guī)定。在給方法起名字時(shí)應(yīng)遵守以下習(xí)慣:名字如果使用拉丁字母,首寫(xiě)字母使用小寫(xiě)。如果由多個(gè)單詞組成,從第2個(gè)單詞開(kāi)始的其它單詞的首寫(xiě)字母使用大寫(xiě)。例如 float getTrangleArea() void setCircleRadius(double radius) 等。 方法聲明之后的一對(duì)大括號(hào)“、“以及之間的內(nèi)容稱作方法的方法體。類(lèi)中的方法必須要有方法體,如果方法的類(lèi)型是void類(lèi)型,方法體中也可以不書(shū)寫(xiě)任何語(yǔ)句。 2方法體的構(gòu)成 方法體的內(nèi)容包括變量的定義和合法的Java語(yǔ)句,在方法體中聲明的變量以及方法的參數(shù)稱作局部變量,局部變量?jī)H僅在該方法內(nèi)有效。方法的參數(shù)在整個(gè)
23、方法內(nèi)有效,方法內(nèi)定義的局部變量從它定義的位置之后開(kāi)始有效。寫(xiě)一個(gè)方法和C語(yǔ)言中寫(xiě)一個(gè)函數(shù)完全類(lèi)似,只不過(guò)在這里稱作方法。局部變量的名字必須符合標(biāo)識(shí)符規(guī)定,遵守習(xí)慣:名字如果使用拉丁字母,首寫(xiě)字母使用小寫(xiě)。如果由多個(gè)單詞組成,從第2個(gè)單詞開(kāi)始的其它單詞的首寫(xiě)字母使用大寫(xiě)。 3實(shí)例方法與類(lèi)方法 除構(gòu)造方法外,其他的方法可分為實(shí)例方法和類(lèi)方法。方法聲明中用關(guān)鍵字static修飾的稱作類(lèi)方法或靜態(tài)方法,不用static修飾的稱作實(shí)例方法。一個(gè)類(lèi)中的方法可以互相調(diào)用:實(shí)例方法可以調(diào)用該類(lèi)中實(shí)例方法或類(lèi)方法;類(lèi)方法只能調(diào)用該類(lèi)的類(lèi)方法,不能調(diào)用實(shí)例方法;如:class A float a,b; void
24、 sum(float x,float y) a=max(x,y); b=min(x,y); 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; float min(float x,float y) return xb?a:b; class Example public static void main(String args) double max=Computer.max(12,45);
25、 /類(lèi)名調(diào)用類(lèi)方法。 System.out.println(max); 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ù)的傳值 下面的例子5中,向一個(gè)方法的根本型參數(shù)傳值。效果如圖4.11 class Tom void f(int x,double y) x=x+1; y=y+1; System.out.prin
26、tf(參數(shù)x和y的值分別是:%d,%fn,x,y); public class Example public static void main(String args) int x=10; double y=12.58; Tom tom=new Tom(); tom.f(x,y); /方法 f中有一次打印,打印方法中的x,y System.out.printf(main方法中x和y的值仍然分別是:%d,%fn,x,y); 2引用類(lèi)型參數(shù)的傳值 Java的引用型數(shù)據(jù)包括我們以前學(xué)習(xí)過(guò)的對(duì)象、數(shù)組 以及后面將要學(xué)習(xí)的接口。當(dāng)參數(shù)是引用類(lèi)型時(shí),“傳值傳遞的是變量的引用而不是變量所引用的實(shí)體。 圖4.
27、13 引用類(lèi)型參數(shù)的傳值 如果改變參數(shù)變量所引用的實(shí)體,就會(huì)導(dǎo)致原變量的實(shí)體發(fā)生同樣的變化,因?yàn)?,兩個(gè)引用型變量如果具有同樣的引用,就會(huì)用同樣的實(shí)體。但是,改變參數(shù)的引用不會(huì)影響向其傳值的變量的引用。 下面的例子6向一個(gè)方法的引用型參數(shù)傳值。效果如圖4.13 class Tom void f(Jerry a) /對(duì)象傳遞引用 a.setLeg(12); System.out.println(參數(shù)a的成員leg的值:+a.getLeg(); a=null; class Jerry int leg; Jerry(int n) leg=n; void setLeg(int n) leg=n; int
28、 getLeg() return leg; public class Example public static void main(String args) Tom tom=new Tom(); Jerry jerry=new Jerry(2); System.out.println(在調(diào)用方法f之前,jerry的成員leg的值:+jerry.getLeg(); tom.f(jerry); System.out.println(在調(diào)用方法f之后,jerry的成員leg的值:+jerry.getLeg(); 在上述例子6中,tom調(diào)用方法f把對(duì)象jerry的引用“傳值給參數(shù)a后,對(duì)象jerry
29、和對(duì)象a就具有同樣的成員變量,即同樣實(shí)體。因此,jerry和a就具有同樣的功能,也就是說(shuō)a調(diào)用方法產(chǎn)生的行為和jerry調(diào)用同一方法產(chǎn)生的行為完全相同。當(dāng)對(duì)象a執(zhí)行 a=null; 后,a就不再有任何實(shí)體,變成一個(gè)空對(duì)象,如果再執(zhí)行: a.setLeg(100);就會(huì)引起NullPointerExcetion異常。但是,jerry的引用沒(méi)有發(fā)生任何變化,它依然引用著原來(lái)的實(shí)體,仍然可以調(diào)用方法產(chǎn)生行為。 在下面的例子7中,“Cone類(lèi)在創(chuàng)立對(duì)象時(shí),將一個(gè)“Circle對(duì)象的引用“傳值給“Cone對(duì)象的“bottom。效果如圖4.14 class Circle double radius; Ci
30、rcle(double r) radius=r; double computerArea() return 3.14*radius*radius; void setRadius(double newRadius) radius=newRadius; double getRadius() return radius; class Cone Circle bottom; double height; Cone(Circle c,double h) bottom=c; height=h; double computerVolume() double volume; volume=bottom put
31、erArea()*height/3.0; return volume; void setBottomRadius(double r) bottom.setRadius(r); double getBottomRadius() return bottom.getRadius(); class Example public static void main(String args) Circle circle=new Circle(10); Cone circular=new Cone(circle,20); System.out.println(circular的bottom半徑:+circul
32、ar.getBottomRadius(); System.out.println(circular的體積:+circular puterVolume(); circular.setBottomRadius(100); System.out.println(circular的bottom半徑:+circular.getBottomRadius(); System.out.println(circular的體積:+circular puterVolume(); 返回4.8 方法重載 方法重載是指一個(gè)類(lèi)中可以有多個(gè)方法具有相同的名字,但這些方法的參數(shù)必須不同,即或者是參數(shù)的個(gè)數(shù)不同,或者是參數(shù)的類(lèi)型
33、不同。方法的返回類(lèi)型和參數(shù)的名字不參與比較,也就是說(shuō),如果兩個(gè)方法的名字相同,即使類(lèi)型不同,也必須保證參數(shù)不同。 下面例4-8 Area類(lèi)中g(shù)etArea方法是一個(gè)重載方法。效果如圖4.15 class People double getArea(double x,int y) return x*y; int getArea(int x,double y) return (int)(x*y); double getArea(float x,float y,float z) return (x*x+y*y+z*z)*2.0; public class Example4_8 public stat
34、ic void main(String args) People zhang=new People(); System.out.println(面積:+zhang.getArea(10,3.88); System.out.println(面積:+zhang.getArea(10.0,8); 返回4.9 this 關(guān)鍵字 this是Java的一個(gè)關(guān)鍵字,可以出現(xiàn)在實(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ì)象。 下述例子9中的構(gòu)造方法中出現(xiàn)了this,表示該對(duì)象在構(gòu)造自己時(shí)調(diào)用了方法cry()。
35、 2在實(shí)例方法中使用this this關(guān)鍵字可以出現(xiàn)在類(lèi)的實(shí)例方法中,代表使用該方法的當(dāng)前對(duì)象。class Tom int leg; Tom(int n) this.cry(); leg=n; this.cry(); void cry() System.out.println(我是Tom ,我現(xiàn)在有+leg+條腿); public static void main(String args) Tom tom=new Tom(4); 我們已經(jīng)知道,實(shí)例方法可以操作成員變量。實(shí)際上,當(dāng)成員變量在實(shí)例方法中出現(xiàn)時(shí),默認(rèn)的格式是: this.成員變量; 意思是當(dāng)前對(duì)象的成員變量,如: class A i
36、nt x; void f() this.x=100; 在上述A類(lèi)中的實(shí)例方法f中出現(xiàn)了this,this就代表使用f的當(dāng)前對(duì)象。所以,this.x就表示當(dāng)前對(duì)象的變量x,當(dāng)對(duì)象調(diào)用方法f時(shí),將100賦給該對(duì)象的變量x。因此,當(dāng)一個(gè)對(duì)象調(diào)用方法時(shí),方法中的成員變量就是指分配給該對(duì)象的成員變量。因此,通常情況下,可以省略成員變量名字前面的“this.。 我們知道類(lèi)的實(shí)例方法可以調(diào)用類(lèi)的其它方法,調(diào)用的默認(rèn)格式是 this.方法; 如:class B void f() this.g(); /對(duì)象調(diào)用方法f時(shí)又調(diào)用了方法g。 void g() System.out.println(ok); 在上述B類(lèi)
37、中的方法f中出現(xiàn)了this,this代表使用方法f的當(dāng)前對(duì)象,所以,方法f的方法體中this.g()就是當(dāng)前對(duì)象調(diào)用方法g,也就是說(shuō),當(dāng)某個(gè)對(duì)象調(diào)用方法f過(guò)程中,又調(diào)用了方法g。由于這種邏輯關(guān)系非常明確,一個(gè)方法調(diào)用另一個(gè)方法時(shí)可以省略方法名字前面的“this.。 3類(lèi)方法中不可以使用this this不能出現(xiàn)在類(lèi)方法中,這是因?yàn)?,?lèi)方法可以通過(guò)類(lèi)名直接調(diào)用,這時(shí),可能還沒(méi)有任何對(duì)象誕生。 4使用this區(qū)分成員變量和局部變量 我們已經(jīng)知道,成員變量在整個(gè)類(lèi)內(nèi)有效,局部變量?jī)H在方法內(nèi)有效。在方法體中聲明的變量以及方法的參數(shù)稱作局部變量,方法的參數(shù)在整個(gè)方法內(nèi)有效,方法內(nèi)定義的局部變量從它定義的
38、位置之后開(kāi)始有效。 如果局部變量的名字與成員變量的名字相同,那么成員變量被隱藏,即這個(gè)成員變量在這個(gè)方法內(nèi)暫時(shí)失效。如: 返回 class Tom int x=188, y; void f() int x=3; y=x; /y得到的值是3,不是188。如果方法f 中沒(méi)有“int x=3;語(yǔ)句,y的值將是188。 這時(shí)如果想在該方法內(nèi)使用成員變量,成員變量前面的“this.就不可以省略,如:返回 class 三角形 float sideA, sideB, sideC, lengthSum; void setSide(float sideA, float sideB, float sideC) t
39、his.sideA=sideA; this.sideB=sideB; this.sideC=sideC; this.sideA、this.sideB、this.sideC就分別表示當(dāng)前對(duì)象的成員變量sideA、sideB、sideC。 返回4.10 包 通過(guò)關(guān)鍵字package聲明包語(yǔ)句。package 語(yǔ)句作為Java源文件的第一條語(yǔ)句,指明該源文件定義的類(lèi)所在的包。package語(yǔ)句的一般格式為: package 包名; 如果源程序中省略了package語(yǔ)句,源文件中所定義命名的類(lèi)被隱含地認(rèn)為是無(wú)名包的一局部,即源文件中定義命名的類(lèi)在同一個(gè)包中,但該包沒(méi)有名字。 包名可以是一個(gè)合法的標(biāo)識(shí)符
40、,也可以是假設(shè)干個(gè)標(biāo)識(shí)符加“.分割而成,如: package sunrise; package sun ; 程序如果使用了包語(yǔ)句,例如: package tom.jiafei; 那么你的目錄結(jié)構(gòu)必須包含有如下的結(jié)構(gòu)tomjiafei 比方 c:1000tomjiafei 并且要將源文件編譯后得到的全部字節(jié)碼文件拷貝到目錄c:1000tomjiafei中,如果你事先將源文件保存到c:1000tomjiafei中,然后編譯源文件,那么生成的字節(jié)碼文件就直接保存到當(dāng)前目錄中了,如: c:1000tomjiafeijavac 源文件 我們將下述例子10的源文件保存到c:1000tomjiafei。效果
41、如圖4.17 package tom.jiafei;class Tom void speak() System.out.println(Tom類(lèi)在tom.jiafei包中); public class Example4_10 public static void main(String args) Tom tom=new Tom(); tom.speak(); System.out.println(Example4_10類(lèi)在tom.jiafei包中); 然后編譯原文件: c:1000tomjiafeijavac Example.java 運(yùn)行程序時(shí)必須到tomjiafei的上一層目錄1000中
42、來(lái)運(yùn)行,如: c:1000java tom.jiafei. Example 因?yàn)槠鹆税?,?lèi)Example的全名已經(jīng)是:tom.jiafei. Example就好比大連的全名是:“中國(guó).遼寧.大連。 包名應(yīng)該防止與其他包名沖突。但要做到這一點(diǎn)似乎很困難,如果你的包需要在全世界是唯一的,Sun公司 建議大家使用自己所在公司的Internet域名倒置后做包名,例如,將域名“sina 的倒置“cn .sina做包名。 2使用參數(shù)“d編譯源文件 javac 可以使用參數(shù)-d指定生成的字節(jié)嗎文件所在的目錄。如果不使用參數(shù)-d,javac在當(dāng)前目錄生成字節(jié)碼文件。 如果源文件沒(méi)有包名,使用參數(shù)-d可以將字
43、節(jié)碼文件存放到你指定的有效目錄中,例如: javac d F:tsinghua1000 MyFile.java 將源文件MyFile.java生成的全部字節(jié)碼文件存放到F:tsinghua1000。 如果源文件使用包語(yǔ)句聲明了包名,使用參數(shù)-d時(shí)要格外小心。假設(shè)源文件的包名是tom.jiafei,保存在在D:2000中, 下述編譯命令: D:2000javac d F:tsinghua1000 MyFile.java 會(huì)在F:tsinghua1000目錄下新建子目錄結(jié)構(gòu)tomjiafe并將字節(jié)碼文件存放到F: tsinghua1000tomjiafei中。 而下述編譯命令: D:2000jav
44、ac d . MyFile.java 會(huì)在當(dāng)前目錄2000下新建子目錄結(jié)構(gòu)tomjiafei,并將字節(jié)碼文件存放到D:2000tomjiafei中。返回4.11 import 語(yǔ)句 使用import 語(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) 為了能使用Java提供給我們的類(lèi),我們可以使用import語(yǔ)句來(lái)引入包中類(lèi)。在一個(gè)Java源程序中可以有多個(gè)import語(yǔ)句,它們必須寫(xiě)在package語(yǔ)句假設(shè)有pa
45、ckage語(yǔ)句的話和源文件中類(lèi)的定義之間.。 Java為我們提供了大約130多個(gè)包,如:java.applet 包含所有的實(shí)現(xiàn)Java applet的類(lèi)java.awt 包含抽象窗口工具集中的圖形、文本、窗口GUI類(lèi)java.awt.image 包含抽象窗口工具集中的圖像處理類(lèi)java.lang 包含所有的根本語(yǔ)言類(lèi)java.io 包含所有的輸入輸出類(lèi) 包含所有實(shí)現(xiàn)網(wǎng)絡(luò)功能的類(lèi)java.until 包含有用的數(shù)據(jù)類(lèi)型類(lèi) 如果使用import語(yǔ)句引入了整個(gè)包中的類(lèi),那么可能會(huì)增加編譯時(shí)間。但絕對(duì)不會(huì)影響程序運(yùn)行的性能。Java運(yùn)行平臺(tái)由所需要的Java類(lèi)庫(kù)和虛擬機(jī)組成,這些類(lèi)庫(kù)被包含在一個(gè)jre
46、lib中的壓縮文件rt.jar中,當(dāng)程序執(zhí)行時(shí),Java運(yùn)行平臺(tái)從類(lèi)庫(kù)中加載程序真正使用的類(lèi)字節(jié)碼到內(nèi)存。 下面的例子11使用了java.util包中的Date類(lèi),用來(lái)顯示本機(jī)的當(dāng)前時(shí)間。 import java.util.Date;public class Example4_11 public static void main(String args) Date date=new Date(); System.out.printf(本地機(jī)器的時(shí)間:n%s,date); 2使用自定義包中的類(lèi) 我們也可以使用import 語(yǔ)句引入自定義包中的類(lèi)。如: import tom.jiafei.*; 我
47、們也可以對(duì)單獨(dú)的一個(gè)類(lèi)進(jìn)行 編譯,生成字節(jié)碼文件然后供其它類(lèi)使用。 以下的源文件SquareEquation.java只有一個(gè)類(lèi)組成,這個(gè)類(lèi)可以被其它的程序引入使用,該源文件的包名是tom.jiafei。 為了使程序能使用tom.jiafei包中的類(lèi),我們必須在 classpath中指明我們包的位置,假設(shè)tom.jiafei的位置是:d:4000,即在d:4000下有子目錄tomjiafei。更新classpath的設(shè)置,在命令行執(zhí)行如下命令: set classpath=E:jdk1.5jrelibrt.jar;.;c:4000package tom.jiafei;public class
48、SquareEquation double a,b,c; double root1,root2; boolean boo; public SquareEquation(double a,double b,double c) this.a=a; this.b=b; this.c=c; if(a!=0) boo=true; else boo=false; public void getRoots() if(boo) System.out.println(是一元2次方程); double disk=b*b-4*a*c; if(disk=0) root1=(-b+Math.sqrt(disk)/(2*
49、a); root2=(-b-Math.sqrt(disk)/(2*a); System.out.printf(方程的根:%f,%fn,root1,root2); else System.out.printf(方程沒(méi)有實(shí)根n); else System.out.println(不是一元2次方程); public void setCoefficient(double a,double b,double c) this.a=a; this.b=b; this.c=c; if(a!=0) boo=true; else boo=false; 也可以將上述命令添加到Classpath值中。在Windows
50、2000系統(tǒng)中,右擊“我的電腦,彈出快捷菜單,然后選擇“屬性命令,彈出“系統(tǒng)特性對(duì)話框,再單擊該對(duì)話框中的高級(jí)選項(xiàng),然后單擊“環(huán)境變量按鈕。對(duì)于Win9x系統(tǒng)可以將上述命令寫(xiě)到autoexec.bat文件中。 將下述源文件SquareEquation.java編譯得到的字節(jié)碼文件拷貝到D:4000tomjiafei中。下面的例子12的源文件保存在 D:4000目錄中,并用import 語(yǔ)句引入包tom.jiafei中的SquareEquation類(lèi)。 import tom.jiafei.*;public class Example4_12 public static void main(Str
51、ing args ) SquareEquation equation=new SquareEquation(4,5,1); equation.getRoots(); equation.setCoefficient(-3,4,5); equation.getRoots(); 3使用無(wú)名包中的類(lèi) 我們也可以使用無(wú)名包中的類(lèi)。假設(shè)上述SquareEquation.java源文件中沒(méi)有使用包語(yǔ)句,如果一個(gè)程序使用SquareEquation類(lèi),可以將該類(lèi)的字節(jié)碼文件存放在當(dāng)前程序所在的目錄中。 編寫(xiě)一個(gè)有價(jià)值的類(lèi)是令人快樂(lè)的事情,你可以將這樣的類(lèi)打包,形成有價(jià)值的“軟件產(chǎn)品,供其他軟件開(kāi)發(fā)者使用。 4
52、防止類(lèi)名混淆 Java運(yùn)行環(huán)境總是先到程序所在目錄中尋找程序所使用的類(lèi),然后加載到內(nèi)存。如果在當(dāng)前目錄沒(méi)有發(fā)現(xiàn)所需要的類(lèi),就到import語(yǔ)句所指的包中查找。 如果在當(dāng)前目錄沒(méi)有發(fā)現(xiàn)所需要的類(lèi),就到import語(yǔ)句所指的包中查找。如果在當(dāng)前目錄中尋找到了要加載的類(lèi),那么程序就不會(huì)再加載import語(yǔ)句引入的同名類(lèi)。返回4.12 訪問(wèn)權(quán)限 類(lèi)有2種重要的成員:成員變量和方法。類(lèi)創(chuàng)立的對(duì)象可以通過(guò)“.運(yùn)算符訪問(wèn)分配給自己的變量,也可以通過(guò)“.運(yùn)算符調(diào)用類(lèi)中的實(shí)例方法和類(lèi)方法。類(lèi)在定義聲明成員變量和方法時(shí),可以用關(guān)鍵字private、protected和public來(lái)說(shuō)明成員變量和方法的訪問(wèn)權(quán)限,使
53、得對(duì)象訪問(wèn)自己的變量和使用方法受到一定的限制。 1私有變量和私有方法 用關(guān)鍵字private修飾的成員變量和方法被稱為私有變量和私有方法。 對(duì)于私有成員變量或方法,只有在本類(lèi)中創(chuàng)立該類(lèi)的對(duì)象時(shí),這個(gè)對(duì)象才能訪問(wèn)自己的私有成員變量和類(lèi)中的私有方法,如例子13,例子14所示。效果如圖4.21 public class Example4_13 private int money; Example4_13() money=2000; private int getMoney() return money; public static void main(String args ) Example4_1
54、3 exa=new Example4_13(); /對(duì)象exa在Example4_13類(lèi)中 exa.money=3000; int m=exa.getMoney(); System.out.println(money=+m); class Employee private double salary=1800; public void setSalary(double salary) if(salary1800&salary=6000) this.salary=salary; public double getSalary() return salary; public class Examp
55、le4_14 public static void main(String args) Employee zhang=new Employee(); Employee wang=new Employee(); zhang.setSalary(100); /賦值不成功 System.out.println(zhang的薪水:+zhang.getSalary(); wang.setSalary(3888); /wang.salary=88888;是非法的,因?yàn)閷?duì)象wang已經(jīng)不在Employee類(lèi)中 System.out.println(wang的薪水:+wang.getSalary(); 2共有
56、變量和共有方法 用public修飾的成員變量和方法被稱為共有變量和共有方法,如: class A public float weight; /weight被修飾為public的float型變量。 public float f(float a,float b) /方法 f是public方法。 當(dāng)我們?cè)谌魏我粋€(gè)類(lèi)中用類(lèi)A 創(chuàng)立了一個(gè)對(duì)象后,該 對(duì)象能訪問(wèn)自己的public變量和類(lèi)中的public方法。如: class B void g() A a=new A(); a.weight=23f; /合法。 a.f(3,4); /合法。 3友好變量和友好方法 不用private、public 、prot
57、ected修飾符的成員變量和方法被稱為友好變量和友好方法,如: class A float weight; /weight是友好的float型變量。 float f(float a,float b) /方法 f是友好方法。 假設(shè)B與A是同一個(gè)包中的類(lèi),那么,下述B類(lèi)中的a.weight、a.f(3,4)都是合法的。 class B void g() A a=new A(); a.weight=23f; /合法。 a.f(3,4); /合法。 4受保護(hù)的成員變量和方法 用protected修飾的成員變量和方法被稱為受保護(hù)的成員變量和受保護(hù)的方法,如: class A protected floa
58、t weight; /weight被修飾為protected的float型變量。 protected float f(float a,float b) /方法 f是public方法。 假設(shè)另外一個(gè)類(lèi)B使用A創(chuàng)立了一個(gè)對(duì)象k,并且A,與B是同一個(gè)包中的類(lèi),那么該對(duì)象k也能通過(guò)類(lèi)A的類(lèi)名訪問(wèn)自己的protected的變量和方法。 后面講了繼承后再講保護(hù)與友好的區(qū)別。 5public類(lèi)與友好類(lèi) 類(lèi)聲明時(shí),如果關(guān)鍵字class前面加上public關(guān)鍵字,就稱這樣的是一個(gè)public類(lèi),不能用protected和private修飾類(lèi)。如: public class A 可以在任何另外一個(gè)類(lèi)中,使用pub
59、lic類(lèi)創(chuàng)立對(duì)象。如果一個(gè)類(lèi)不加public修飾,如: class A 這樣的類(lèi)成為友好。在另外一個(gè)類(lèi)用友好類(lèi)創(chuàng)立對(duì)象時(shí),要保證在同一個(gè)包內(nèi)。 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ì)象就受到一定的限制。 假設(shè)對(duì)象a是A類(lèi)創(chuàng)立的,我們把對(duì)象對(duì)成員的訪問(wèn)權(quán)限總結(jié)在下表4
60、.1中表4.1 對(duì)象訪問(wèn)成員對(duì)象a的位置private成員友好成員protected成員public成員在類(lèi)A中,a訪問(wèn)成員允許允許允許允許在與A同包的另外一個(gè)類(lèi)中a訪問(wèn)成員不允許允許允許允許在與A不同包的另外一個(gè)類(lèi)中a訪問(wèn)成員不允許不允許不允許允許返回4.13 對(duì)象的組合 一個(gè)類(lèi)可以把對(duì)象作為自己的成員變量,如果用這樣的類(lèi)創(chuàng)立對(duì)象,那么該對(duì)象中就會(huì)有其它類(lèi)對(duì)象,也就是說(shuō)該對(duì)象將其他對(duì)象作為自己的組成局部這就是人們常說(shuō)的Has-A,或者說(shuō)該對(duì)象是由幾個(gè)對(duì)象組合而成 .例子15Rectangle.javapublic class Rectangle private double x,y,widt
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 日用百貨買(mǎi)賣(mài)合同
- 2025年泰安普通貨運(yùn)從業(yè)資格證模擬考試
- 公司內(nèi)部溝通平臺(tái)使用記錄表格(電子版)
- 商場(chǎng)多經(jīng)點(diǎn)位租賃合同
- 執(zhí)行和解協(xié)議書(shū)范例8篇
- 2025年高中化學(xué)新教材同步 必修第一冊(cè) 第1章 階段重點(diǎn)突破練(一)
- 小額放貸公司合同范本
- 按揭車(chē)轉(zhuǎn)讓合同范本
- 液晶聚合物L(fēng)CP戰(zhàn)略市場(chǎng)規(guī)劃報(bào)告
- 社保知識(shí)競(jìng)賽考試題及答案
- 華為HCSA-Presales-IT售前認(rèn)證備考試題及答案
- 2024-2030年中國(guó)纖維板行業(yè)發(fā)展趨勢(shì)與投資戰(zhàn)略研究報(bào)告
- 小學(xué)二年級(jí)上冊(cè)數(shù)學(xué)思維訓(xùn)練題100道及答案解析
- 2024年品酒師職業(yè)技能大賽理論考試題庫(kù)及答案
- 2024-2025學(xué)年全國(guó)中學(xué)生天文知識(shí)競(jìng)賽考試題庫(kù)(含答案)
- 2024至2030年中國(guó)細(xì)胞農(nóng)業(yè)動(dòng)向追蹤與發(fā)展前景現(xiàn)狀探索報(bào)告
- 2025初級(jí)社會(huì)工作實(shí)務(wù)考試要點(diǎn)速記
- 數(shù)據(jù)中心全生命周期綠色算力指數(shù)白皮書(shū) 2024
- 接觸網(wǎng)工高級(jí)技師理論試題庫(kù)及答案
- 初中美術(shù)備課組工作計(jì)劃
評(píng)論
0/150
提交評(píng)論