1. 程式人生 > >(1)構造方法和方法重載 (2)this關鍵字 (3)方法的傳參和遞歸調用

(1)構造方法和方法重載 (2)this關鍵字 (3)方法的傳參和遞歸調用

編寫 gpo 基本 規律 class 分配內存 相同 出現 只需要

1.構造方法和方法重載
如:
Person p = new Person(); - 聲明Person類型的引用p指向Person類型的對象
p.show(); - 調用名字為show()的成員方法

1.1 構造方法(重中之重)
(1)語法格式
class 類名{

類名(形參列表){
構造方法體;
}
}
如:
class Person{

Person(){
}
}

(2)使用方式
a.構造方法的名稱與類名完全相同,並且沒有返回值類型,連void都不許有;
b.當創建新對象時會自動調用構造方法來進行該對象中成員變量的初始化工作;

(3)默認構造方法
當自定義類中沒有編寫任何構造方法時,則編譯器會自動添加一個無參的空構造方法,該方法叫做默認/缺省構造方法,如:Person(){}。
若類中出現自定義構造方法,則編譯器不再提供任何形式的構造方法。

練習:
自定義Point類,特征:橫坐標和縱坐標,行為有:無參構造方法、有參構造方法、打印橫坐標和縱坐標的方法。
自定義TestPoint類,在main()方法中先使用無參方式構造對象打印特征,再使用有參方式構造對象打印特征。

1.2 方法的重載(重點)
(1)基本概念
在Java語言中允許出現多個名稱相同但參數列表不同的方法,稱為:方法的重載(Overload)

(2)主要形式
方法重載的主要形式體現在:形參的個數不同、形參的類型不同、形參的類型順序不同,
與形參變量名和返回值類型無關,但建議返回值類型最好相同。
判斷方法能否重載的核心:在調用方法時能否加以區分。

(3)重載的意義
重載的意義在於調用者只需要記住一個方法名就可以調用各種不同的版本帶來不同的結果。
如:
java.io.PrintStream類。
byte b1 = 10;
System.out.println(b1);
short s1 = 10;
System.out.println(s1);
int i1 = 10;
System.out.println(i1);
double d1 = 3.14;
System.out.println(d1);

2.this關鍵字(原理、理解)
2.1 基本概念
對於構造方法來說,this關鍵字就代表當前正在構造的對象;
對於成員方法來說,this關鍵字就代表當前正在調用的對象;

原理:
在每個成員方法中都隱含一個看不見的形參this,當不同的對象調用同一個方法時,會將不同的對象作為實參傳遞給this,此時this代表的對象不同,而訪問成員變量時默認為this.的方式訪問,那麽this不同就會導致this.成員變量的結果不同。
(this.相當於漢語中"我的")

2.2 使用方式
(1)當形參變量名和成員變量名相同時,在方法體內會優先選擇形參變量使用,若希望使用
成員變量,則需要在變量名的前面加上this.進行說明(重中之重)。
(2)在構造方法的第一行可以使用this(實參)的方式調用本類中的其他構造方法(了解)。

3.方法的傳參和遞歸調用
3.1 方法的傳參過程(理解)
(1)main()方法是程序的入口,為局部變量分配內存空間並初始化;
(2)調用max()方法,為max()方法的形參變量分配內存空間;
(3)將實參變量的數值賦值為形參變量;
(4)執行max()方法的方法體,方法執行完畢後釋放形參變量的內存空間;
(5)main()方法得到max()方法的返回值,並繼續向下執行;
(6)直到main()方法結束後,釋放main()方法中局部變量的內存空間;

要求大家掌握的內容:
a.當使用基本數據類型作為參數傳遞時,形參變量的改變通常不會影響到實參的數值;
b.當使用引用數據類型作為參數傳遞時,形參變量指向內容的改變通常會影響實參的數值;
c.當使用引用數據類型作為參數傳遞時,若改變形參變量的指向後再改變指向的內容,
此時通常不會影響到實參的數值;

3.2 方法的遞歸調用(難點)
(1)基本概念
遞歸就是指在一個方法體的內部調用當前方法自身的形式。

案例:
自定義成員方法計算參數n的階乘並返回。
解析:
5! = 5 * 4 * 3 * 2 * 1;
4! = 4 * 3 * 2 * 1;
3! = 3 * 2 * 1;
2! = 2 * 1;
1! = 1;

5! = 5 * 4!;
4! = 4 * 3!;
3! = 3 * 2!;
2! = 2 * 1!;
1! = 1;

n! = n * (n-1)!;

(2)使用方式
a.尋找遞歸的規律並指定退出條件;
b.使用遞歸使得問題簡單化而不是復雜化;
c.若遞歸算法影響程序的性能,則使用遞推替代之;

(1)構造方法和方法重載 (2)this關鍵字 (3)方法的傳參和遞歸調用