- 零基礎(chǔ)學(xué)Java第2版
- 陳潔
- 2414字
- 2018-12-31 19:34:45
8.2 對象家族中的成員
對象家族中有什么呢?有對象的成員方法和對象的成員變量,這些都有什么含義?如何使用它們?在本節(jié)中,將會通過實例詳細地講述。
8.2.1 對象的成員方法
方法就是能夠讓這個對象做什么,或者表現(xiàn)出什么狀態(tài)的函數(shù)。舉一個例子,有一個自行車的對象,如何讓它停止、如何駕駛它,這些都是前面所提到的方法。方法就是其他編程語言中所提到的函數(shù),而這個函數(shù)用來實現(xiàn)對象的某個功能,或表現(xiàn)出對象的某個狀態(tài)。
什么是成員?成員的意思就是指它是屬于對象的,就好比某個俱樂部的成員是屬于這個俱樂部的一樣。
將前面兩個概念連在一起,就很清楚了。所謂的成員方法就是屬于對象的,能夠讓對象做什么或表現(xiàn)出什么狀態(tài)的函數(shù)。
【實例8.2】下面看一個實例。
01 public class object2 02 { 03 void print() 04 { 05 System.out.println("小明是一名優(yōu)秀的程序員"); 06 } 07 public static void main(String[] args) 08 { 09 object2 m=new object2 (); 10 m.print(); 11 } 12 }
【代碼說明】從這個程序段中,可以看到“print()”函數(shù)其實就是“object2”這個類中的成員方法。要想使用這個成員方法,必須根據(jù)這個類“object2”構(gòu)造出一個對象,再利用這個對象初始化一個對象句柄,這樣就可以利用這個句柄來訪問這個成員方法。
【運行效果】
小明是一名優(yōu)秀的程序員
【實例8.3】下面再看一個復(fù)雜一點的有關(guān)成員方法的實例。
01 public class object3 02 { 03 public void print() 04 { 05 for(int i=0;i<=5;i++) 06 { 07 for(int j=5-i;j>=0;j--) 08 { 09 System.out.print("*"); 10 } 11 System.out.println(); 12 } 13 } 14 public static void main(String[] args) 15 { 16 object3 pro=new object3(); 17 pro.print(); 18 } 19 }
【代碼說明】在這個程序中,構(gòu)造了一個方法“print()”,然后構(gòu)造對象pro,通過pro來訪問這個方法。
【運行效果】
****** ***** **** *** ** *
【實例8.4】仔細來看看下面的程序,將上面程序改變一下。
01 public class object4 02 { 03 public static void main(String[] args) 04 { 05 for(int i=0;i<=5;i++) 06 { 07 for(int j=5-i;j>=0;j--) 08 { 09 System.out.print("*"); 10 } 11 System.out.println(); 12 } 13 } 14 }
【代碼說明】這段程序沒有定義類中的方法“print()”,而是直接輸出內(nèi)容。這是一種面向過程開發(fā)的程序。
【運行效果】
****** ***** **** *** ** *
這個程序是否比前面那個程序段讀起來要費勁呢?而這個就是面向?qū)ο蟪绦蛟O(shè)計和面向過程程序設(shè)計的最大區(qū)別。面向?qū)ο蟮某绦蛟O(shè)計將這個程序中每個部件(包括成員方法),作為一個模塊,等要使用它的時候,再隨時調(diào)用它們,而面向過程的程序設(shè)計,將這個程序的需求按照順序的步驟來編寫。
下面再分析一下實例8.3中的代碼,在面向?qū)ο蟮某绦蛟O(shè)計中,讀者一定要學(xué)會一點,首先看主運行程序,也就是“public static void main(String[] args){}”。在這個主運行程序中,看到了兩句代碼。一句是對象初始化語句,一句是利用對象引用成員方法的語句,這樣讀者就很清楚,這個程序要干什么,然后再仔細地看這個成員方法是干什么的,這樣會使整個程序變得越來越輕松。
【實例8.5】成員方法越來越復(fù)雜。面向?qū)ο蟮某绦蛟O(shè)計的思路,會使得程序很容易讀。下面再看一個更加復(fù)雜的程序,來體會使用成員方法的優(yōu)點。
01 public class object5 02 { 03 public void print2() 04 { 05 for(int i=5;i>0;i--) 06 { 07 for(int k=0;k<=(5-i);k++) 08 { 09 System.out.print(" "); 10 } 11 for(int j=1;j<=(2*i-1);j++) 12 { 13 System.out.print("*"); 14 } 15 System.out.println(); 16 } 17 } 18 public void print1() 19 { 20 for(int i=1;i<=5;i++) 21 { 22 for(int j=0;j<=(5-i);j++) 23 { 24 System.out.print(" "); 25 } 26 for(int k=1;k<=(2*i-1);k++) 27 { 28 System.out.print("*"); 29 } 30 System.out.println(); 31 } 32 } 33 public static void main(String[] args) 34 { 35 object5 pro=new object5(); 36 pro.print1(); 37 pro.print2(); 38 } 39 }
【代碼說明】這個程序段看起來有點復(fù)雜,使用上面說的讀程序的方法。首先看看主運行程序,在主運行程序中有3句:一句是對象初始化語句,一句是引用“print1()”方法,最后一句是引用“print2()”方法。然后再看“print1()”和“print2()”兩個方法是如何實現(xiàn)的。至于這個方法的實現(xiàn)過程,應(yīng)該很簡單,只不過是一個多層for循環(huán)語句而已,讀者可以自己分析它的實現(xiàn)過程。
【運行效果】
* *** ***** ******* ********* ********* ******* ***** *** *
成員方法就是函數(shù)段,而函數(shù)段擁有自己的特性。在定義函數(shù)時必須遵照下面的結(jié)構(gòu):
返回值類型 方法名(形式參數(shù)) { 方法體 }
首先來討論一下返回值類型。什么叫返回值?返回值就是一個函數(shù)結(jié)果所獲得的值,將這個值返回到主程序中,并且將這個值作為主程序中運行的參數(shù)的值。
【實例8.6】下面看一個有關(guān)返回值的例子。
01 public class object6 02 { 03 int print(int x) 04 { 05 return 2*x; 06 } 07 public static void main(String[] args) 08 { 09 object6 pro=new object6(); 10 System.out.println(pro.print(3)); 11 } 12 }
【代碼說明】這個程序段中,第3行創(chuàng)建了一個“int print(int x)”方法,在這個方法中返回了“2*x”,將這個值帶回到主運行程序中去,于是在主運行程序中,根據(jù)“pro.print(x)”中的參數(shù)“x=3”,得出這個方法的返回值是6。其實還有兩個概念希望讀者能清楚,就是實參和形參。剛才說的“int print(int x)”中的“x”就是形參,而主運行程序中相同函數(shù)的參數(shù)被稱為實參。
【運行效果】
6
上面說到返回值,但有的函數(shù)方法是沒有返回值的,那該如何處理呢?在程序設(shè)計中,如果一個方法函數(shù)沒有返回值,那么可以將函數(shù)結(jié)構(gòu)中的返回值類型寫成“void”,這個就代表此函數(shù)無返回值。
【實例8.7】例如下面的程序段。
01 public class object7 02 { 03 void print() 04 { 05 System.out.println("我是一名程序員"); 06 } 07 public static void main(String[] args) 08 { 09 object7 pro=new object7(); 10 pro.print(); 11 } 12 }
【代碼說明】第3行定義了print()方法,其只是輸出一段內(nèi)容,并不返回任何值,所以定義為void類型。第10行演示如何調(diào)用這個方法。
【運行效果】
我是一個名程序員
【實例8.8】上面的程序段就是一個無返回值類型的程序例子。為了加深印象,下面看一個詳細的復(fù)雜的實例。
01 public class object8 02 { 03 public int sum(int x,int y,int z) 04 { 05 int sum; 06 return sum=x+y+z; 07 } 08 public int aver(int x,int y,int z) 09 { 10 int aver; 11 return aver=(x+y+z)/3; 12 } 13 void print() 14 { 15 System.out.println("這個就是這個同學(xué)的成績"); 16 } 17 public static void main(String[] args) 18 { 19 object8 num=new object8(); 20 System.out.println(num.sum(90,80,70)); 21 System.out.println(num.aver(90,80,70)); 22 num.print(); 23 } 24 }
【代碼說明】以上的程序中包含無返回值的print()方法(第13~16行),同時也包含了帶返回值的方法sum()和aver()(第3~12行)。
【運行效果】
240 80 這個就是這個同學(xué)的成績
8.2.2 對象的成員變量
成員變量是什么呢?理解了成員方法,一定可以知道成員變量是什么。成員變量就是對象所擁有的、并且代表對象的屬性值,例如一個自行車對象,它的顏色、材料等都是自行車的屬性值,也可以說是它的成員變量。
提起成員變量,就想到前面講過的局部變量。其實這里說的成員變量相當(dāng)于前面說過的類變量。它也可以不用初始化,系統(tǒng)自動給它賦值。局部變量就不能不初始化了,否則在編譯的時候會報錯,前面已經(jīng)有過實例,此小節(jié)就不再贅述。
- PostgreSQL Cookbook
- SQL for Data Analytics
- PHP 編程從入門到實踐
- HTML5+CSS3+JavaScript Web開發(fā)案例教程(在線實訓(xùn)版)
- 數(shù)據(jù)結(jié)構(gòu)(C語言)
- Oracle JDeveloper 11gR2 Cookbook
- 愛上micro:bit
- INSTANT Yii 1.1 Application Development Starter
- Swift語言實戰(zhàn)晉級
- Exploring SE for Android
- SEO教程:搜索引擎優(yōu)化入門與進階(第3版)
- Professional JavaScript
- Responsive Web Design with jQuery
- 三步學(xué)Python
- Web應(yīng)用程序開發(fā)技術(shù)