版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、《Java程序設計之網絡編程》,,教學課件,第4章 面向對象程序設計基礎,主要內容,4.1 面向對象的基本概念4.2 類的定義4.3 類和對象的使用 4.4 包package4.5 成員變量及方法的訪問權限4.6 final、this及其它,,4.1 面向對象的基本概念,4.1.1面向對象編程的概念 4.1.2客觀事物的抽象,,4.1.1面向對象編程的概念,1、面向過程編程: 我們很多人使用
2、過Fortran、Basic,C等面向過程的程序設計語言,這些語言是按流程化的思想來組織的。在這些語言的設計思想中,通常將存放基本數(shù)據(jù)類型的變量作為程序處理對象、以變量的賦值作為程序的基本操作、以變量值的改變作為程序運行的狀態(tài)。這種程序設計風格存在著數(shù)據(jù)抽象簡單、信息完全暴露、算法復雜、無法很好地描述客觀世界等缺點。在程序設計過程中,為了實現(xiàn)有限度的代碼重用,公共代碼被組織成為過程或函數(shù)。當需要代碼重用時,調用已經組織好的過程或函數(shù)。在
3、這種應用方式中,如果軟件項目龐大,程序的調試和維護將變得異常困難。,4.1.1面向對象編程的概念,2、面向對象編程: 而面向對象的程序設計思想是將數(shù)據(jù)以及對于這些數(shù)據(jù)的操作,封裝在了一個單獨的數(shù)據(jù)結構中。這種模式更近似于現(xiàn)實世界,在這里,所有的對象都同時擁有屬性以及與這些屬性相關的行為。對象之間的聯(lián)系是通過消息來實現(xiàn)的,消息是請求對象執(zhí)行某一處理或回答某些信息的要求。某個對象在執(zhí)行相應的處理時,可以通過傳遞消息請求其
4、他對象完成某些處理工作或回答某些消息。其他對象在執(zhí)行所要求的處理活動時,同樣可以通過傳遞消息和另外的對象聯(lián)系。所以,一個面向對象程序的執(zhí)行,就是靠對象間傳遞消息來完成的。,4.1.1面向對象編程的概念,面向對象編程: 面向對象程序設計是一種新興的程序設計方法,或者是一種新的程序設計規(guī)范,它使用對象、類、繼承、封裝、消息等基本概念來進行程序的設計。從現(xiàn)實世界中客觀存在的事物(即對象)出發(fā)來構造軟件系統(tǒng),并且在系統(tǒng)構造
5、中盡可能運用人類的自然思維方式。開發(fā)一個軟件是為了解決某些問題,這些問題所涉及的業(yè)務范圍稱作該軟件的問題域。其應用領域不僅僅是軟件,還有計算機體系結構和人工智能等。,4.1.1面向對象編程的概念,面向對象的三大特點:封裝、繼承、多態(tài) 1)封裝 封裝就是把對象的屬性和和對這些屬性的操作封裝在一個單獨的數(shù)據(jù)結構中,并盡可能隱蔽對象的內部細節(jié),包含兩個含義:把對象的全部屬性和對屬性的全部操作結合在一起,形成一個不可分割的獨立單元(即對
6、象)。信息隱蔽,即盡可能隱蔽對象的內部細節(jié),對外形成一個邊界〔或者說形成一道屏障〕,只保留有限的對外接口使之與外部發(fā)生聯(lián)系。,4.1.1面向對象編程的概念,面向對象的三大特點:封裝、繼承、多態(tài) 2)繼承 繼承是一種由已有的類創(chuàng)建新類的機制。利用繼承,我們可以先創(chuàng)建一個擁有共有屬性的一般類,根據(jù)該一般類再創(chuàng)建具有特殊屬性的新類,新類繼承一般類的狀態(tài)和行為,并根據(jù)需要增加它自己的新的狀態(tài)和行為。由繼承而得到的類稱為子類
7、,被繼承的類稱為父類或超類。Java不支持多重繼承,子類只能有一個父類。 在Java編程語言中,通過繼承可利用已有的類,并擴展它的屬性和方法。這個已有的類可以是語言本身提供的、其他程序員編寫的或程序員原來編寫的。繼承在Java中無所不在。,4.1.1面向對象編程的概念,面向對象的三大特點:封裝、繼承、多態(tài) 3)多態(tài) 對象的多態(tài)是由封裝和繼承引出的面向對象程序設計語言的另一特征。主要體現(xiàn)在兩個方面:方法重載時實現(xiàn)的靜
8、態(tài)多態(tài)和方法重載時實現(xiàn)的動態(tài)多態(tài)。 多態(tài)性使得我們的同一方法,可以有多種形式。另外父類中定義的屬性或方法被子類繼承之后,可以具有不同的數(shù)據(jù)類型或表現(xiàn)出不同的行為,同一個屬性或方法在父類及其各個子類中可以具有不同的語義。,4.1.2客觀事物的抽象,為了使計算機能夠處理和理解客觀事物,必須對事物進行抽象,以求得事物的本質?,F(xiàn)實事物紛繁復雜,因此,在事物抽象過程中,必須忽略抽象事物中那些與當前目的無關的特征,求取對當前需求有直
9、接影響的因素。因此,針對客觀事物的抽象必須掌握一定的抽象原則。 我們知道,當確定了一個圓形的圓心位置和圓的半徑后,就可以在平面上確定一個圓。因此,抽象出來的圓的要素為圓心和半徑。,4.1.2客觀事物的抽象,用數(shù)據(jù)結構來表示,如下:class Circle{point center; // 圓心float rudius; // 半徑}其中class是面向對象程序設計常用來定義“類”這種數(shù)據(jù)結構的關鍵
10、字。,4.1.2客觀事物的抽象,添加一些基本的行為如獲取圓的面積,表示如下:class Circle { point center; // 屬性或成員 float radius; // 屬性或成員 double getArea(){ // 方法 return radius*radius*3.1415926; }},4.1.2客觀事物
11、的抽象,添加一些基本的行為如獲取圓的面積,表示如下:class Circle { point center; // 屬性或成員 float radius; // 屬性或成員 double getArea(){ // 方法 return radius*radius*3.1415926; }},第4章 面向對象程序設計基礎,4.1 面向
12、對象的基本概念4.2 類的定義4.3 類和對象的使用 4.4 包package4.5 成員變量及方法的訪問權限4.6 final、this及其它,,4.2 類的定義,4.2.1 類聲明4.2.2 類體4.2.3 實例化對象4.2.4 構造方法說明 4.2.5 對象的清除4.2.6 方法重載,,4.2.1類聲明,類的聲明舉例:class Circle { point center;
13、 // 屬性或成員 float radius; // 屬性或成員 double getArea(){ // 方法 return radius*radius*3.1415926; }}public class Rectangle extends Shapes implement Display{ …… // 類體} //
14、下面的Rectangle類繼承了Shapes父類,實現(xiàn)了接口 Display,是一個公共類。,4.2.1類聲明,類聲明的格式如下: [修飾符] class 類名 [extends 超類名] [implements接口名列表] {……}可能的選項有:[public][abstract|final] class 類名 [extends 超類名] [implements 接口名列表]{……} public(公
15、共):public修飾的類能被所有的類訪問。 abstract(抽象):abstract修飾的類不能被實例化,它包含 有未實現(xiàn)的方法。 final(最終):final修飾的類不能被繼承,即不能有子類。 注意: abstract和final不能同時作為一個類的修飾符。,4.2.1類聲明,類名: 習慣上類名的第一個字母大寫,但這不是必須的。類的名字不能是Java 中的關鍵字,要符合標識符規(guī)定,即名字可
16、以由字母,下劃線,數(shù)字或美圓符號組成,并且第一個字符不能是數(shù)字。但給類命名時,最好遵守如下習慣: 如果類名使用拉丁字母,那么名字的首寫字母使用大寫字母,例如Hello、Time、People等。 類名最好見名知意,當類名由幾個”單詞”復合而成時,每個單詞的首寫字母使用大寫,如BeijingTime、AmericanMap、HelloChina等。,4.2.1類聲明,extends(繼承): extend
17、s保留字用來表明新創(chuàng)建的類繼承哪個類,被繼承的類稱為此類的父類。extends后面只能跟一個父類名。 implements(實現(xiàn)): 用來表明這個類實現(xiàn)了哪些接口,接口名可以有多個。例如:下面的類是合法的:class MyC1ass { //空類,沒有任何用處,但是合法 }又如:下面的Rectangle類繼承了Shapes父類,實現(xiàn)了接口Display,是一個公共類。public class Rectang
18、le extends Shapes implement Display{ …… // 類體},4.2.2類體,類體中定義了該類所有的成員變量和該類所支持的方法,其格式說明如下: { [成員變量說明] [成員方法說明] },4.2.2類體,類體:{[public | protected | private ] [static] [final] [transient] [volatile] type vari
19、ableName; //成員變量[public | protected | private ] [static][final | abstract] [native] [synchronized]returnType methodName([paramList]) [throws exceptionList]{statements} //成員方法},4.2.2類體,1.成員變量說明
20、 成員變量又稱值域。成員變量的說明類似于方法的局部變量說明,所不同的是,成員變量定義在類中,是類成員的一部分,整個類都可以訪問它。Java中成員變量說明形式如下: [修飾符] 成員變量類型 成員變量名列表; 例如:private int number;成員變量的修飾符有以下幾種:缺省訪問修飾符、public、protected、private、final、static、transient和volatile。關于
21、這些修飾符的含義以后將講到。,4.2.2類體,2.成員變量使用 類的成員變量在定義它的類內部,可以直接通過成員變量名來訪問。class Circle {static final float PI=3.1415926f; // 常量 private Point center; // 屬性或成員private float radius; // 屬性或成員static Color color;
22、public float area;float getArea(){ // 方法 return radius*radius*PI; //內部訪問成員變量}},4.2.2類體,如果從類的外部訪問,類變量和類對象變量的使用方法是不同。訪問類變量的格式如下: 類名.類變量名 例如我們可以采用下面形式訪問上例中的靜態(tài)變量color的:Circle.color,由此可見,訪問類變量與類的對象構造和對
23、象都無關。類變量名必須用static修飾。更詳細的說明見后面的章節(jié)。訪問實例變量的格式如下: 對象名.實例變量名 例如Circle c1=new Circle(); //c1是對象名System.out.println(“area=”+c1.area);,4.2.2類體,3、成員方法說明 在Java中,方法總是Java類的一個組成部分。通過類的方法,改變對象的狀態(tài)。方法說明分為方法首部說明和方法體兩部分。 方
24、法首部說明的格式如下: [方法修飾符] 返回值類型 方法名([形參列表])[throws異常列表] 可能的選項有:[public | protected | private ] [static][final | abstract] [native] [synchronized] returnType methodName([paramList])[throws exceptionList]//方法聲明{……},4.2.2
25、類體,4.方法體 方法體是實現(xiàn)這個方法的代碼段,它由“{”和“}”括起來的語句序列構成。方法體也可以是一個分號“;”,表示無方法體,該方法沒有實現(xiàn)。當且僅當方法的修飾符中有abstract或native時,方法才無方法體。例如求解三角形問題時可以編寫Triangle類,在Triangle類可以有如下的3個方法。程序如下:,4.2.2類體,4.方法體 class Triangle{ double sizdA,siddB,siddC
26、; //三角形的三邊void setSide(double a,double b,double c){ //該方法用來賦初值sideA=a;sideB=b;sideC=c;}boolean isOrNotTriangle(){ //判斷是否是三角形的方法 if(sideA+sideB>sideC&&sideA+sideC>sideB&&sideB+sideC>si
27、deA){ return true;}else{ return flase;}}},4.2.2類體,5.方法的調用 成員方法又分為類方法(靜態(tài)方法)和對象方法(實例方法)兩類。他們的調用是有區(qū)別的。前面已經簡單討論了類變量。類變量不屬于由類定義的個別實例對象,而是屬于定義它的類;實例變量是針對實例的。這些討論同樣也適用于類方法。 類方法調用形式如下: 類名.類靜態(tài)方法名(實參列表) 對象方法調用形式如下
28、: 類對象名.類非靜態(tài)方法名(實參列表) 例如Circle c1=new Circle(); // r1是對象名System.out.println(“area=”+c1.getArea());,4.2.3 實例化對象,前面講過,類是創(chuàng)建對象的模板.當使用一個類創(chuàng)建了一個對象時,我們也說我們給出了這個類的一個實例。通常的格式為:Type objectName=new Type([parameterList]);創(chuàng)建一個
29、對象包括對象的聲明、為對象分配內存空間和賦初值三個步驟。1、對象的聲明格式為:類的名字 對象名字;如 People zhangPing;這里People 是一個類的名字,zhangPing是我們聲明的對象的名字.,4.2.3 實例化對象,2、 為聲明的對象分配內存.使用new 運算符和類的構造方法為聲明的對象分配內存,如果類中沒有構造方法,系統(tǒng)會調用默認的構造方法。默認的構造方法是無參數(shù)的,構造方法的名字必須和類名相
30、同。用new可以為一個類實例化多個不同的對象,這些對象分別占用不同的內存空間,因此改變其中一個對象的狀態(tài)不會影響其他對象的狀態(tài)。3、最后一步是執(zhí)行構造方法,進行初始化。zhangPing=new People(“20040101”); zhongYong=new People(“20040102”); //實例化另外一個對象。上面三個步驟,通??梢詫懗扇缦潞啙嵉男问剑篜eople zhangPing=new People(“2
31、0040101”);,4.2.3 實例化對象,【例4-1】下面的例子將建立雇員信息類EmpInfo,并實例化對象,然后打印出若干信息。// EmpInfo.javapublic class EmpInfo { String name; // 雇員的姓名 String designation; // 雇員的職務 String department; // 雇員的部門 void print(
32、) { // 成員方法 System.out.println(name + " is " + designation + " at " + department); },4.2.3 實例化對象,public static void main(String argv[]){ EmpInfo employee = new EmpInfo(); //
33、 創(chuàng)建對象并實例化 employee.name = " Robert Javaman " ; // 給成員變量賦值 employee.designation = " Manager " ; //給成員變量賦值 employee.department = " Coffee Shop " ; //給成員變量賦值 employee.print(
34、); // 調用方法print() } }運行結果如下:Robert Javaman is Manager at Coffee Shop,4.2.4構造方法,每當由類構造對象時都要調用該類特定的構造方法,在Java中,每個類都至少有一個構造方法。構造方法可以確保用戶正確地構造類的對象,同時,構造方法也會對對象作初始化工作。構造方法說明形式如下: [構造方法修飾符] 方法名([形
35、式參數(shù)列表]) [throws異常列表] {方法體 }構造方法修飾符與一般方法修飾符相同,讀者可參見4.2.2小節(jié)。,4.2.4構造方法,構造方法不能像一般的方法那樣被直接調用,它是在構造類的實例的時候被new關鍵字調用的。當我們構造一個類的實例的時候,編譯器主要完成以下三件事情: (1) 為對象分配內存空間; (2) 初始化對象中的實例變量的值
36、,初始值可以是缺省值,或者變量按指定的值初始化; (3) 調用對象的構造方法。 一個類的構造方法可以有多個,它們都具有相同的方法名,即類名。編譯器根據(jù)參數(shù)的類型來決定調用哪個構造方法。這就是構造方法的多態(tài)。,4.2.4構造方法,構造方法分為缺省的構造方法(不帶參數(shù))和帶參數(shù)的構造方法。 (1)缺省的構造方法 如果類的定義沒有編寫構造方法,Java語言會自動為用戶提供。這個由Java自動提
37、供的構造方法就是所謂的缺省構造方法。缺省的構造方法確保每個Java類都至少有一個構造方法,該方法應符合方法的定義。 例如在例4-1的類EmpInfo中,我們沒有定義構造方法,則Java自動提供了一個缺省的構造方法,如下: public EmpInfo(){} //缺省的構造方法,4.2.4構造方法,構造方法分為缺省的構造方法(不帶參數(shù))和帶參數(shù)的構造方法。,4.2.4構造方法,構造方法分為缺省的構造方
38、法(不帶參數(shù))和帶參數(shù)的構造方法。 (2)帶參數(shù)的構造方法 帶有參數(shù)的構造方法能夠實現(xiàn)這樣的功能:當構造一個新對象時,類構造方法可以按需要將一些指定的參數(shù)傳遞給對象的變量。,4.2.4構造方法,【例4-3】在例4-1的基礎上編寫帶參數(shù)的構造方法。// EmpInfoC.javapublic class EmpInfoC { String name; // 雇員的姓名 String desig
39、nation; // 雇員的職務 String department; // 雇員的部門 // 帶參數(shù)的構造方法 public EmpInfoC(String name,String designation,String department){ this.name=name; this.designation=designation; this.department=depart
40、ment;} void print() { // 成員方法 System.out.println(name + " is " + designation + " at " + department); }},4.2.4構造方法,【例4-3】在例4-1的基礎上編寫帶參數(shù)的構造方法。 public static void main(String argv[])
41、{ EmpInfoC employee = new EmpInfoC("Robert Javaman ","Manager","Coffee Shop"); employee.print(); // 調用方法print() } }運行結果如下:Robert Javaman is Manager at Coff
42、ee Shop由于采用了帶有參數(shù)的構造方法來實例化對象,同時對對象進行初始化,與例4-1相比較,代碼少了,更簡潔更清晰了,如下: EmpInfo employee = new EmpInfo(); // 創(chuàng)建對象并實例化 employee.name = " Robert Javaman " ; // 給成員變量賦值 employee.designation = "
43、Manager " ; //給成員變量賦值 employee.department = " Coffee Shop " ; //給成員變量賦值 employee.print(); // 調用方法print() },4.2.5 對象的清除,Java運行時系統(tǒng)通過垃圾收集器周期性地釋放無用對象所使用的內存,完成對
44、象的清除。當不存在對一個對象的引用時,該對象成為一個無用對象。Java的垃圾收集器自動掃描對象的動態(tài)內存區(qū),對被引用的對象加標記,然后把沒有引用的對象作為垃圾收集起來并釋放。垃圾收集器作為一個線程運行,當系統(tǒng)的內存用盡或程序中調用System.gc()要求進行垃圾收集時,垃圾收集線程與系統(tǒng)同步運行,否則垃圾收集器在系統(tǒng)空閑時異步地執(zhí)行。在對象作為垃圾被收集器釋放前,Java運行時系統(tǒng)會自動調用對象的方法finialize(),使它清除自
45、己所使用的資源。 在類的定義中,除了必須定義創(chuàng)建類實例的方法外,還可以在定義中提供用于對象清除的方法finialize(),它的格式如下: protected void finalize() throws Throwable{ //撤銷對象 } finalize()方法是類java.long.Object中最基本的方法。 前面已經講過,Java提供自動內存垃圾收集和處理程序。然而,在某些情況下,當一
46、個類被破壞后,需要親自執(zhí)行一些垃圾收集器不能處理的特殊清理工作。,4.2.6 方法重載,方法重載(Method Overloading)就是一個類中可以有多個方法具有相同的名字,但這些方法的參數(shù)必須不同,即或者是參數(shù)的個數(shù)不同,或者是參數(shù)的類型不同,或者是返回值不同。 這也是面向對象的程序設計中的奇妙之處,重載反映了大千世界的變化。 從另外的含義上來講,重載也可以看成是同一個方法具有不同的版本,每個版本之間在參數(shù)特征和返回值
47、方面有差別。重載是Java實現(xiàn)多態(tài)性的一種方式。 當調用一個重載方法時,JVM自動根據(jù)當前對方法的調用形式在類的定義中匹配形式符合的成員方法,匹配成功后,執(zhí)行參數(shù)類型、數(shù)量均相同的成員方法。方法重載在Java的API類庫中得到大量的使用。,4.2.6 方法重載,【例4-4】關于成員方法重載的例子//DemoOverload.javaclass Demo2{ int a,b; int method(){
48、 //成員方法一 return a+b; } int method(int c){ //成員方法二 return a+b+c; } int method(int c,int d){ //成員方法三 return a+b+c+d; } Demo2(int a,int b) { //構造方法 this.a = a;
49、 this.b = b; }},4.2.6 方法重載,【例4-4】關于成員方法重載的例子public class DemoOverload{public static void main(String args[]){ Demo2 aDemo2 = new Demo2(1,2); //實例化 int a = aDemo2.method(); //調用成員方法一 S
50、ystem.out.println(a); int b = aDemo2.method(3); //調用成員方法二 System.out.println(b); int c = aDemo2.method(3,4);//調用成員方法三 System.out.println(c);}}上面程序的運行結果為:3610,4.2.6 方法重載,【例4-5】構造方法也可以重載
51、,// ConstructionOverload.javaclass Demo{ int a,b,c;//成員變量 public Demo(){} //構造方法1 public Demo(int a) { //構造方法2 this.a = a; } public Demo(int a,int b) { //構造方法3 this.a = a;this.b = b;
52、} public Demo(int a,int b,int c) {//構造方法4 this.a = a;this.b = b;this.c = c;} },4.2.6 方法重載,public class ConstructionOverload{public static void main(String args[]){ //應用第一種構造方法 Demo aDe
53、mo = new Demo(); System.out.println("方法一成員變量a:"+aDemo.a); System.out.println("方法一成員變量b:"+aDemo.b); System.out.println("方法一成員變量c:"+aDemo.c); //應用第二種構造方法
54、 Demo bDemo = new Demo(1); System.out.println("方法二成員變量a:"+bDemo.a); System.out.println("方法二成員變量b:"+bDemo.b); System.out.println("方法二成員變量c:"+bDemo.c);……,4.2.6 方法重載,從上面的程
55、序中可以看到構造方法的重載。在該程序中,方法Demo()被定義了四次,每次參數(shù)不同。第一個構造方法,沒有參數(shù),也沒有方法體,它和系統(tǒng)的缺省構造方法是一致的。缺省的構造方法確保每個Java類都至少有一個構造方法。如果程序中給出了帶參數(shù)的構造方法,而沒有給出缺省構造方法,這時調用缺省構造方法將導致錯誤。 在調用構造方法時,由于使用的是同一方法名,因此根據(jù)構造方法的參數(shù)就能找到需要運行的哪個方法。,第4章 面向對象程序設計基礎,4
56、.1 面向對象的基本概念4.2 類的定義4.3 類和對象的使用 4.4 包package4.5 成員變量及方法的訪問權限4.6 final、this及其它,,4.3 類和對象的使用,4.3.1實例變量和類變量4.3.2 實例方法和類方法,,4.3.1實例變量和類變量,在生成每個類的實例對象時,Java運行時系統(tǒng)為每個對象的實例變量分配一塊內存,然后可以通過該對象來訪問這些實例的變量。不同對象的實例變量是不同的。
57、而對于類變量來說,在生成類的第一個實例對象時,Java運行時系統(tǒng)對這個對象的每個類變量分配一塊內存,以后再生成該類的實例對象時,這些實例對象將共享同一個類變量,每個實例對象對類變量的改變都會直接影響到其他實例對象。類變量可以通過類名直接訪問,也可以通過實例對象來訪問,兩種方法的結果是相同的。,4.3.2 實例方法和類方法,實例方法可以對當前對象的實例變量進行操作,也可以對類變量進行操作,但類方法不能訪問實例變量。實例方法必須由實例對象來
58、調用,而類方法除了可由實例對象調用外,還可以由類名直接調用。另外,在類方法中不能使用this或super。 關于類方法的使用,有如下一些限制: (1) 在類方法中不能引用對象變量。 (2) 在類方法中不能使用super、this關鍵字。 (3) 類方法不能調用類中的對象方法。 如果違反這些限制,你的程序就會導致編譯錯誤。 與類方法相比,實例方法幾乎沒有什么限制: (1) 實例方法可以引
59、用對象變量(這是顯然的),也可以引用類變量。 (2) 實例方法中可以使用super、this關鍵字。 (3) 實例方法中可以調用類方法。,4.3.2 實例方法和類方法,【例4-6】下面是關于實例變量的例子//instVar.javaclass koA{ int a; public void display(){ System.out.print(" a="+a); } }
60、 public class instVar{ public static void main(String args[]){ koA a1=new koA(); a1.a=10; //a1是一個實例對象 koA a2=new koA(); a2.a=20; // a2是另一個實例對象a1.display();a2.display(); }}運行結果為
61、a=10 a=20,4.3.2 實例方法和類方法,【例4-7】 下面是類變量的例子// classVar.javaclass koB{ static int a; public void display(){ System.out.print(" a="+a); } } public class classVar{ public static void main(Stri
62、ng args[]){ koB a1=new koB(); a1.a=10; //a1是一個實例對象 koB a2=new koB(); a2.a=20; //a2是另一個實例對象 koB.a=50; //類方法直接訪問類變量a1.display(); a2.display(); }}運行結果為:a=50 a=50,4.3.2 實例
63、方法和類方法,【例4-8】下面是類方法使用的例子// classMethodTest.javaclass member{static int classVar; int instanceVar;static void setClassVar(int i){ classVar=i;// instanceVar=i; //在類方法中不能引用實例成員。}static int getClassVar( ){
64、 return classVar;}void setInstanceVar(int i ){ classVar=i; instanceVar=i;}int getInstanceVar(){return instanceVar; }},4.3.2 實例方法和類方法,public class classMethodTest{ public static void main(String args[]){
65、 member m1=new member( ); member m2=new member( ); m1.setClassVar(1); m2.setClassVar(2);System.out.println("m1.classVar="+m1.getClassVar( )+ " m2.classVar="+m2.getClassVar( )); m1.setInstanceVa
66、r(11); m2.setInstanceVar(22);System.out.println("m1.InstanceVar="+m1.getInstanceVar( )+ " m2.InstanceVar="+m2.getInstanceVar( ));}}運行結果為: m1.classVar=2 m2.classVar=2 m1.InstanccVar=11 m
67、2.InstanceVar=22,第4章 面向對象程序設計基礎,4.1 面向對象的基本概念4.2 類的定義4.3 類和對象的使用 4.4 包package4.5 成員變量及方法的訪問權限4.6 final、this及其它,,4.4 包package,4.4.1 package語句4.4.2 import語句4.4.3 編譯和運行包,,4.4 包package,由于Java編譯器為每個類生成一個字節(jié)碼文
68、件,且文件名與類名相同,因此同名的類有可能發(fā)生沖突。為了解決這一問題,Java提供包來管理類名空間。包實際上提供了一種命名機制和可見性限制機制。Java虛擬機(JVM)決定如何創(chuàng)建和存儲包、子包以及相應的編譯單元,并決定哪些頂層包名稱在特定的編譯中是可見的,以及決定哪些包是可訪問的。包可以存儲在在當?shù)匚募到y(tǒng)中、分布式文件系統(tǒng)當中,或者某種形式的數(shù)據(jù)庫中。Java系統(tǒng)必須支持至少一個無名包(也叫缺省包),一般為當前目錄。在開發(fā)小的或
69、者臨時的應用程序或者剛剛開始開發(fā)時,用無名包是非常方便的。,4.4.1 package語句,package語句作為Java源文件的第一條語句,指明該文件中定義的類所在的包。(若缺省該語句,則指定為無名包)。它的格式為:package pkg1[.pkg2[.pkg3…]];Java編譯器把包對應于文件系統(tǒng)的目錄。例如:名為myPackage的包中,所有類文件都將存儲在目錄myPackage下。同時,package語句中,用“.”來
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- java-面向對象高級程序設計
- java基礎和面向對象面試題
- java面向對象總結
- java面向對象編程
- -java-在線考試
- 計算機專業(yè)外文資料翻譯--對象持久化和java-深入的了解面向對象語言中的對象持久的討論
- java與面向對象編程
- 面向對象的java語言練習
- 《面向對象程序設計(java)》
- java面向對象考題和答案
- java面向對象測試試題
- java面向對象教程筆記01
- 09_java面向對象_講義
- java-程序控制語句
- java-筆試題(1)答案
- java的面向對象編程--------課堂筆記
- java面向對象的學習心得
- java面向對象程序設計03類與對象
- java面向對象程序設計教案
- java程序設計-系列練習6-面向對象高級基礎
評論
0/150
提交評論