[18/11/25] 構造方法
阿新 • • 發佈:2018-11-25
1、構造方法(constructor)
含義:
構造方法(也叫構造器),用於物件的初始化;是一個建立物件時被自動呼叫的特殊方法,目的是物件的初始化。構造方法的名稱應與類的名稱一致。Java通過new關鍵字來
呼叫構造器,從而返回該類的例項,是一種特殊的方法。當然也可以過載。
格式: // 1. 通過new關鍵字呼叫 2、構造方法的方法名必須和類名一致!
[修飾符] 類名 (形參){ // 3. 構造方法雖然有返回值,但是不能定義返回值型別(返回值的型別肯定是本類),不能在構造方法裡使用return返回某個值。
語句; // 4. 如果沒有定義構造方法,則編譯器會自動定義一個無參的建構函式。如果應經定義則編譯器不會自動新增!
}
程式碼示例:
1 class Point //構造方法(也叫構造器) 2 { 3 double x,y; 4 public Point(double _x,double _y) //構造方法(一種特殊的方法) 原則:1、方法名與類名相同 5 { // 2、不能定義返回值型別,即public int Point或return X;是錯誤的(雖然這個方法可以給你返回1個值).單獨寫return是對的 6 x=_x; // 但是沒有必要,此時return 表示結束方法的執行(作用之一,注:另一個作用是返回一個值) 7y=_y; 8 } 9 10 public double getDistance(Point z) //普通方法 11 { //這裡的z是個Point型別(類似於int型 double型的資料型別)的形參,意味著是它具有x,y這2個屬性可以操作 12 return Math.sqrt( (x-z.x)*(x-z.x)+(y-z.y)*(y-z.y) ); 13 } 14 } 15 16 17 18 public class Test_1125_01 //構造方法與普通方法的區別:1、構造方法在例項化物件(new)時只調用1次 2、普通方法是在例項化物件產 19 //生之後,通過物件.方法呼叫多次。 20 { 21 public static void main(String[] args) 22 { 23 Point p=new Point (3.0,4.0); //構造方法 通過這步 完成了例項化物件,並操作了物件p屬性 使物件p屬性為 x=3.0 y=4.0 24 //可以看出:構造方法的主要作用是 【物件的初始化操作】 即若希望物件例項化的同時給其賦值,則可以使用構造方法 25 26 Point origin= new Point(0.0,0.0); 27 28 System.out.println(p.getDistance(origin)); //此時物件origin經過初始化之後 x已經=0.0 y已經=0.0 29 //物件p呼叫getDistance方法, 實參origin送到形參z處,輸出結果 30 31 32 } 33 }
2、構造方法的過載(與普通方法沒有什麼區別)
【程式碼示例】
1 class User 2 { 3 int id; //成員變數id name pwd 4 String name; 5 String pwd; //構造方法的過載演示 6 public User(){ //無引數的構造方法 7 8 } 9 public User(int id,String name){ //區域性變數 id 和name(與成員變數名字相同,需加 this 關鍵字,this表示建立好的物件) 10 super(); //構造方法第1句總是super(),即使不寫,編譯器自動新增並執行這一句 11 this.id=id; //此處的this.id 是指成員變數 id(不是最近的區域性變數 id),如果不加this根據就近原則指的是區域性變數 id 12 this.name=name; 13 14 } 15 16 public User(int id,String name,String pwd){ 17 //super(); 18 this.id=id; 19 this.name=name; 20 this.pwd=pwd; 21 } 22 23 } 24 25 26 public class Test_1125_02 27 { 28 public static void main(String[] args) 29 { 30 User u1=new User(); 31 User u2=new User(101 ,"李白"); 32 User u3=new User(102,"杜甫","123456"); 33 34 System.out.println(" 編號:"+u2.id+"\t"+"姓名:"+u2.name); 35 System.out.println(" 編號:"+u3.id+"\t"+"姓名:"+u3.name+"\t"+"密碼:"+u3.pwd); 36 37 } 38 }