方法和構造器的區別

(1)功能和作用的不同
構造器是爲了創建一個類的實例。這個過程也可以在創建一個對象的時候用到:Platypus p1 = new Platypus();
相反,方法的作用是爲了執行Java代碼。

(2)修飾符,返回值和命名的不同 
構造器和方法在下面三個方便的區別:修飾符,返回值,命名。和方法一樣,構造器可以有任何訪問的修飾: public, protected, private或者沒有修飾(通常被package 和 friendly調用). 不同於方法的是,構造器不能有以下非訪問性質的修飾: abstract, final, native, static, 或者 synchronized。 
返回類型也是非常重要的。方法能返回任何類型的值或者無返回值(void),構造器沒有返回值,也不需要void。 
(3)兩者的命名。
 構造器使用和類相同的名字,而方法則不同。按照習慣,方法通常用小寫字母開始,而構造器通常用大寫字母開始。構造器通常是一個名詞,因爲它和類名相同;而方法通常更接近動詞,因爲它說明一個操作。
(4)"this"的用法。
 構造器和方法使用關鍵字this有很大的區別。方法引用this指向正在執行方法的類的實例。靜態方法不能使用this關鍵字,因爲靜態方法不屬於類的實例,所以this也就沒有什麼東西去指向。構造器的this指向同一個類中,不同參數列表的另外一個構造器、例如:在我們上課做過的BirthDate類中:

public class BirthDate{
private int year;
private int month;
private int day;
BirthDate(int ye){
year = ye;
}
BirthDate(){
this(1987);
}

public static void main(String args[]) {

               BirthDate b1 = new BirthDate(2009); 

               BirthDate b2 = new BirthDate(); 

}

}
在上面的代碼中,有2個不同參數列表的構造器。第一個構造器,給類的成員year賦值,第二個構造器,調用第一個構造器,給成員變量year一個初始值 1987.在構造器中,如果要使用關鍵字this,那麼,必須放在第一行,如果不這樣,將導致一個編譯錯誤。
(5)編譯器自動加入代碼
編譯器自動加入代碼到構造器,當我們寫一個沒有構造器的類,編譯的時候,編譯器會自動加上一個不帶參數的構造器.相信這一點大家是沒有問題的啦。

(6)繼承 
構造器是不能被繼承的。子類可以繼承超類的任何方法。看看下面的代碼: 

public class Example {
public void HelloWorld {
system.out.println(“HelloWorld”);
}
Example() {}
}
public class SubClass extends Example {
}

     類 SubClass 自動繼承了父類中的HelloWorld方法,但是,父類中的構造器 Example()卻不能被繼承

(1)帶形式參數的構造器:
構造器和其它方法一樣,也可以有形式參數。構造器有了形式參數,我們就可以在初始化對象的時候提供實際參數。java爲了讓名字相同而形式參數不同的構造器同時存在,必須使用“方法重載”。

①區分重載方法

   在用戶調用的時候區分它們的唯一方法是它們獨一無二的參數列表(java中形式參數出現順序的不同會被認爲是兩個方法),除此之外,別無它法。

②涉及基本類型的重載

   實際參數的類型與形式參數的類型不符時會出現兩種情況。第一種,實參類型“小於”

形參時,較小的類型會自動提升爲較大類型,char類型會被提升爲int類型;第二,實參“大於”形參,必須使用強制類型轉換-(形參類型)實參類型。

③以返回值區分重載方法是行不通的

   int f();

   void f();

   java無法判斷調用的是哪一個f()方法,因此,根據返回值來區分方法是行不通的。

(2)無參數構造器

  又稱缺省構造器。它的作用是創建一個“基本對象”。如果類中沒用寫構造器,則編譯器會自動創建一個缺省構造器。但是,如果已經定義一個構造器(無論有無參數),編譯器就不會幫你自動創建缺省構造器了。

總結:
主題 功能 修飾
構造器: 建立一個類的實例 不能用bstract, final, native, static, or synchronized
方法 : java功能語句 能用。

主題 返回類型 this
構造器 : 沒有返回值,沒有void 指向同一個類中另外一個構造器,在第一行
方法 : 有返回值,或者void 指向當前類的一個實例,不能用於靜態方法

主題 繼承 編譯器自動加入
構造器 : 構造器不能被繼承 是(如果沒有)
方法 : 方法可以被繼承 不支持

轉自http://blog.csdn.net/yaoxy/article/details/4302658

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章