構造java函式(轉)
構造java函式(轉)[@more@]每次在建立例項變數,對類中的所有變數都要初始化是很乏味的。即使你對setDim ( ) 這樣的方法增加有用的功能時,你也不得不這樣做。如果在一個物件最初被建立時就把對它的設定做好,那樣的話,程式將更簡單並且更簡明。因為對初始化的要求是共同的,Java 允許物件在他們被創造時初始化自己。這種自動的初始化是透過使用建構函式來完成的。
建構函式(constructor )在物件建立時初始化。它與它的類同名,它的語法與方法類似。一旦定義了建構函式,在物件建立後,在new運算子完成前,建構函式立即自動呼叫。建構函式看起來有點奇怪,因為它沒有任何返回值,即使是void 型的值也不返回。這是因為一個類的建構函式內隱藏的型別是它自己類的型別。建構函式的任務就是初始化一個物件的內部狀態,以便使建立的例項變數能夠完全初始化,可以被物件馬上使用。
你可以重寫Box 例子程式,以便當物件建立時盒子的尺寸能被自動地初始化。為了達到這個目的,用建構函式代替setDim 。讓我們由定義僅僅將每個盒子的尺寸設定為同樣值的一個簡單的建構函式開始。示例如下:
/* Here,Box uses a constructor to initialize the
dimensions of a box.
*/
class Box {
double width; double height; double depth;
// This is the constructor for Box.
Box() {
System.out.println("Constructing Box");
width = 10;
height = 10;
depth = 10;
}
// compute and return volume double volume() { return width * height * depth;}}
class BoxDemo6 {
public static void main(String args[]) { // declare,allocate,and initialize Box objectsBox mybox1 = new Box();Box mybox2 = new Box();
double vol;
// get volume of first box
vol = mybox1.volume();
System.out.println("Volume is " + vol);
// get volume of second box
vol = mybox2.volume();
System.out.println("Volume is " + vol);
}
}
執行該程式,產生如下的結果:
Constructing Box
Constructing Box
Volume is 1000.0
Volume is 1000.0
正如你能看到的一樣,當mybox1 和mybox2 被建立時,它們兩個都被Box 建構函式初始化。因為建構函式將所有的盒子賦為一樣的尺寸,長、寬、高都是10,mybox1 和 mybox2 將有一樣的體積。在Box( )內的println( ) 語句僅僅是為說明的緣故。大多數建構函式的功能不顯示任何東西,他們僅簡單地初始化一個物件。
在繼續學習前,讓我們再考察new運算子。你已經知道,當分配一個物件時,使用下面的通用格式:
class-var = new classname( );
現在你可以理解為什麼在類的名字後面需要圓括號。圓括號的作用是呼叫該類的建構函式。這樣,在下面的這行中
Box mybox1 = new Box();
new Box( ) 呼叫Box( )建構函式。如果你不顯式為類定義一個建構函式,Java 將為該類建立一個預設的建構函式。這就是本行程式在Box早期版本沒有定義建構函式工作的原因。
預設建構函式自動地將所有的例項變數初始化為零。預設建構函式對簡單的類是足夠的,但是對更復雜的類它就不能滿足要求了。一旦你定義了你自己的建構函式,預設建構函式將不再被使用。
6.5.1 帶自變數的建構函式
雖然在前面的例子中,Box建構函式確實初始化了Box物件,但它不是很有用,因為所有的盒子都是一樣的尺寸。我們所需要的是一種能夠構造各種各樣尺寸盒子物件的方法。比較容易的解決辦法是對建構函式增加自變數。你可能已經猜到,這將使他們更有用。例如,下面版本的Box程式定義了一個自變數建構函式,它根據自變數設定每個指定盒子的尺寸。特別注意Box 物件是如何被建立的。
/* Here,Box uses a parameterized constructor to
initialize the dimensions of a box.
*/
class Box {
double width; double height; double depth;
// This is the constructor for Box.
Box(double w,double h,double d) {width = w;height = h;depth = d;
}
// compute and return volume double volume() { return width * height * depth;}}
class BoxDemo7 {
public static void main(String args[]) { // declare,allocate,and initialize Box objectsBox mybox1 = new Box(10,20,15);Box mybox2 = new Box(3,6,9);
double vol;
// get volume of first box
vol = mybox1.volume();
System.out.println("Volume is " + vol);
// get volume of second box
vol = mybox2.volume();
System.out.println("Volume is " + vol);
}
}
該程式的輸出如下:
Volume is 3000.0
Volume is 162.0
正如你看到的,每個物件被它的建構函式指定的引數初始化。例如,在下行中,
Box mybox1 = new Box(10,20,15);
當new建立物件時,值10,20,15傳遞到Box() 建構函式。這樣,mybox1 的複製width 、height 、depth 將分別包含值10、20、15。
建構函式(constructor )在物件建立時初始化。它與它的類同名,它的語法與方法類似。一旦定義了建構函式,在物件建立後,在new運算子完成前,建構函式立即自動呼叫。建構函式看起來有點奇怪,因為它沒有任何返回值,即使是void 型的值也不返回。這是因為一個類的建構函式內隱藏的型別是它自己類的型別。建構函式的任務就是初始化一個物件的內部狀態,以便使建立的例項變數能夠完全初始化,可以被物件馬上使用。
你可以重寫Box 例子程式,以便當物件建立時盒子的尺寸能被自動地初始化。為了達到這個目的,用建構函式代替setDim 。讓我們由定義僅僅將每個盒子的尺寸設定為同樣值的一個簡單的建構函式開始。示例如下:
/* Here,Box uses a constructor to initialize the
dimensions of a box.
*/
class Box {
double width; double height; double depth;
// This is the constructor for Box.
Box() {
System.out.println("Constructing Box");
width = 10;
height = 10;
depth = 10;
}
// compute and return volume double volume() { return width * height * depth;}}
class BoxDemo6 {
public static void main(String args[]) { // declare,allocate,and initialize Box objectsBox mybox1 = new Box();Box mybox2 = new Box();
double vol;
// get volume of first box
vol = mybox1.volume();
System.out.println("Volume is " + vol);
// get volume of second box
vol = mybox2.volume();
System.out.println("Volume is " + vol);
}
}
執行該程式,產生如下的結果:
Constructing Box
Constructing Box
Volume is 1000.0
Volume is 1000.0
正如你能看到的一樣,當mybox1 和mybox2 被建立時,它們兩個都被Box 建構函式初始化。因為建構函式將所有的盒子賦為一樣的尺寸,長、寬、高都是10,mybox1 和 mybox2 將有一樣的體積。在Box( )內的println( ) 語句僅僅是為說明的緣故。大多數建構函式的功能不顯示任何東西,他們僅簡單地初始化一個物件。
在繼續學習前,讓我們再考察new運算子。你已經知道,當分配一個物件時,使用下面的通用格式:
class-var = new classname( );
現在你可以理解為什麼在類的名字後面需要圓括號。圓括號的作用是呼叫該類的建構函式。這樣,在下面的這行中
Box mybox1 = new Box();
new Box( ) 呼叫Box( )建構函式。如果你不顯式為類定義一個建構函式,Java 將為該類建立一個預設的建構函式。這就是本行程式在Box早期版本沒有定義建構函式工作的原因。
預設建構函式自動地將所有的例項變數初始化為零。預設建構函式對簡單的類是足夠的,但是對更復雜的類它就不能滿足要求了。一旦你定義了你自己的建構函式,預設建構函式將不再被使用。
6.5.1 帶自變數的建構函式
雖然在前面的例子中,Box建構函式確實初始化了Box物件,但它不是很有用,因為所有的盒子都是一樣的尺寸。我們所需要的是一種能夠構造各種各樣尺寸盒子物件的方法。比較容易的解決辦法是對建構函式增加自變數。你可能已經猜到,這將使他們更有用。例如,下面版本的Box程式定義了一個自變數建構函式,它根據自變數設定每個指定盒子的尺寸。特別注意Box 物件是如何被建立的。
/* Here,Box uses a parameterized constructor to
initialize the dimensions of a box.
*/
class Box {
double width; double height; double depth;
// This is the constructor for Box.
Box(double w,double h,double d) {width = w;height = h;depth = d;
}
// compute and return volume double volume() { return width * height * depth;}}
class BoxDemo7 {
public static void main(String args[]) { // declare,allocate,and initialize Box objectsBox mybox1 = new Box(10,20,15);Box mybox2 = new Box(3,6,9);
double vol;
// get volume of first box
vol = mybox1.volume();
System.out.println("Volume is " + vol);
// get volume of second box
vol = mybox2.volume();
System.out.println("Volume is " + vol);
}
}
該程式的輸出如下:
Volume is 3000.0
Volume is 162.0
正如你看到的,每個物件被它的建構函式指定的引數初始化。例如,在下行中,
Box mybox1 = new Box(10,20,15);
當new建立物件時,值10,20,15傳遞到Box() 建構函式。這樣,mybox1 的複製width 、height 、depth 將分別包含值10、20、15。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617731/viewspace-958061/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 構造和解構函式呼叫順序函式
- 用函式索引構造特殊的約束函式索引
- C++ 建構函式實戰指南:預設構造、帶引數構造、複製構造與移動構造C++函式
- Java建構函式詳解Java函式
- Java泛型建構函式Java泛型函式
- 區分:派生類指定基類建構函式、繼承構造、委託構造函式繼承
- Java中靜態程式碼塊、構造程式碼塊、建構函式、普通程式碼塊Java函式
- C++ 移動構造和複製建構函式匹配C++函式
- static程式碼塊、構造程式碼塊、建構函式以及Java類初始化順序C程式函式Java
- 建構函式與解構函式函式
- 預設建構函式、引數化建構函式、複製建構函式、解構函式函式
- Java--構造器和構造方法Java構造方法
- C++型別轉換建構函式C++型別函式
- java構造器Java
- C++ 建構函式和解構函式C++函式
- 類的建構函式和解構函式函式
- 建構函式定義的隱式型別轉換函式型別
- Java建構函式的繼承問題Java函式繼承
- C/C++中的new/delete、構造/解構函式、dynamic_cast分析C++delete函式AST
- Day76.雜湊表、雜湊函式的構造 -資料結構函式資料結構
- 嬰兒的出生為你解惑建構函式和構造程式碼塊函式
- 編譯原理: Thompson 構造法(正規表示式 轉 NFA)編譯原理
- Java函式式介面Java函式
- PHP筆記:建構函式與解構函式PHP筆記函式
- C++之Big Three:拷貝構造、拷貝賦值、解構函式探究C++賦值函式
- ## 建構函式函式
- 好程式設計師Java培訓分享Java函式式編碼結構程式設計師Java函式
- java方法/函式Java函式
- 關於建構函式與解構函式的分享函式
- C++入門記-建構函式和解構函式C++函式
- Java構造器 小白版Java
- Python程式碼閱讀(第38篇):根據謂詞函式和屬性字串構造判斷函式Python函式字串
- java自定義equals函式和hashCode函式Java函式
- Class:向傳統類模式轉變的建構函式模式函式
- del解構函式函式
- JavaScript 建構函式JavaScript函式
- 詳解Java函式式介面Java函式
- C++建構函式和解構函式呼叫虛擬函式時使用靜態聯編C++函式
- C++中建構函式,拷貝建構函式和賦值函式的詳解C++函式賦值