構造java函數

發表于:2007-07-14來源:作者:點擊數: 標簽:
每次在創建實例變量,對類中的所有變量都要初始化是很乏味的。即使你對setDim ( ) 這樣的方法增加有用的功能時,你也不得不這樣做。如果在一個對象最初被創建時就把對它的設置做好,那樣的話,程序將更簡單并且更簡明。因為對初始化的要求是共同的, Java 允

每次在創建實例變量,對類中的所有變量都要初始化是很乏味的。即使你對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。

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97