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元
111個222元
100元
月餅很貴
[18-4建構式常用於欄位之初始化]
<範例-預設建構式>預設建構式是進行對各定義變數的基本初始化
class Conin1 {
String name ;
float height ;
}
class Coninmain1 {
public static void main(String[ ] args) {
Conin1 x = new Conin1(); //初始化name、height
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公分
留言列表