18   特殊的方法-建構式(Constructor)

建構式有稱為建構子者,為當物件建立時會自動被呼叫的特殊方法,建構式名稱必須和類別名稱相同。

建構式無回傳值型別,亦即無須void宣告及return敘述。

<一般方法之呼叫>

class Gms {                        

   void method1( ) {

     int a =10 , b = 20 , c ;

     c = a + b ;

     System.out.println("c= " + c) ;

   }

}

class Gmmain1 {

   public static void main(String[ ] args) {

     Gms cc = new Gms( ) ;

     cc.method1( ) ;

   }

}

執行結果:C:\js>java Gmmain1

c= 30

 

<建構式之呼叫(建立物件時自動執行)>

class Cons {

   int a , b ;  

   Cons( ) { a = 5 ; b = 10 ; }//建構式

}

class Consmain1 {

   public static void main(String[ ] args) {

     Cons ff = new Cons( ) ;  //建構式自動執行

     System.out.println("a=" + ff.a + "     b=" + ff.b) ;

   }

}

執行結果:C:\js>java Consmain1

a=5    b=10


[18-1建構式的種類]

[18-1-1沒有參數的建構]

 

同前例:

class Con1 {

   int a , b ;  

   Con1( ) { a = 1 ; b = 2 ; }//建構式

}

class Conmain1 {

   public static void main(String[ ] args) {

     Con1 ff = new Con1( ) ;  //建構式自動執行

     System.out.println("a=" + ff.a + "     b=" + ff.b) ;

   }

}

執行結果:C:\js>java Conmain1

a=1     b=2

 

[18-1-2有參數的建構]

class Con2 {

   String a ; int b ;  

   Con2(String x, int y) { a = x ; b = y ; }//字串x及整數y

}

class Conmain2 {

   public static void main(String[ ] args) {

     Con2 ii = new Con2("月餅的價錢為", 100 ) ;

     System.out.println(ii.a + ii.b + "") ;

   }

}

執行結果:C:\js>java Conmain2

月餅的價錢為100

 

 

[18-2預設建構]

當類別沒有定義建構式時,Java會自動定義一個沒有參數且無敘述式的建構式,稱為預設建構式。預設建構式對於程式的執行沒有影響,或謂預設建構式是進行對各定義變數的基本初始化,即數字型態為0、文字型態為空字元等。

 

<預設建構式的樣子>

class Con3 { ..........................

Con3( ) {   }  //無參數且無敘述式,自動產生

............................

}

 

 

[18-3建構式多載]

建構式是特殊的方法,方法可有多載,一個類別也可定義多個建構式,只要是參數型別、個數不同,當然這些建構式都和類別同名。在類別建立物件時,同方法多載一樣,是執行參數型別、個數相同之建構式。

 

<範例>

class Conover1 {

   String a ;   int b ;  

   Conover1(String x, int y) {                  //建構式1

     a = x ;

     b = y ;

     System.out.println(a + b + "") ;       }

   Conover1(String x ) {                      //建構式2

     a = x ;

     System.out.println(a) ;               }

   Conover1( int y) {                        //建構式3

     b = y ;

     System.out.println(b + "") ;         }

   Conover1() {                            //建構式4

     a = "111" ; b = 222 ;

     System.out.println(a + "" + b + "") ; }

}

 

class conovermain1 {

   public static void main(String[ ] args) {

     Conover1 ii = new Conover1("月餅的價錢為", 100 ) ; //建構式1

     Conover1 jj = new Conover1() ;                   //建構式4

     Conover1 mm = new Conover1(100 ) ;             //建構式3

     Conover1 nn = new Conover1("月餅很貴" ) ;         //建構式2

   }

}

執行結果:C:\js>java Conovermain1

月餅的價錢為100

111222

100

月餅很貴

 

 

[18-4建構式常用於欄位之初始化]

<範例-預設建構式>預設建構式是進行對各定義變數的基本初始化

class Conin1 {

   String name ;

   float height ;  

}

 

class Coninmain1 {

   public static void main(String[ ] args) {

     Conin1 x = new Conin1();  //初始化nameheight

     x.name = "陳一" ; //指定運算

     x.height = 167.5f ; //指定運算

     System.out.println(x.name + x.height + "公分") ;

   

     Conin1 y = new Conin1();

     y.name = "林二" ;

     y.height = 162.0f ;

     System.out.println(y.name + y.height + "公分") ;

 

     Conin1 z = new Conin1();

     z.name = "張三" ;

     z.height = 174.0f ;

     System.out.println(z.name + z.height + "公分") ;

 

     Conin1 s = new Conin1();

     s.name = "李四" ;

     s.height = 185.5f ;

     System.out.println(s.name + s.height + "公分") ;

   }

}

執行結果:C:\js>java Coninmain1

陳一167.5公分

林二162.0公分

張三174.0公分

李四185.5公分

 

 

<範例-自定建構式>

建構式初始化,已包含上述範例之指定運算,可簡化程式並達同樣效果。

class Conin2 {

   String name ;

   float height ;

   Conin2(String namein, float heightin) {

     name = namein ; //初始化

     height = heightin ; //初始化

     System.out.println(name + height + "公分") ;

   }

}

 

class Coninmain2 {

   public static void main(String[ ] args) {

     Conin2 x = new Conin2("陳一", 167.5f );

     Conin2 y = new Conin2("林二", 162.0f );

     Conin2 z = new Conin2("張三", 174.0f );

     Conin2 s = new Conin2("李四", 185.5f );

   }

}

執行結果:C:\js>java Coninmain2

陳一167.5公分

林二162.0公分

張三174.0公分

李四185.5公分

 

arrow
arrow

    祈泊 發表在 痞客邦 留言(0) 人氣()