java方法(轉(zhuǎn))

java 方法(轉(zhuǎn))[@more@]在本章的開始提到,類通常由兩個要素組成:實例變量和方法。方法是個很大的話題,因為Java 給他們?nèi)绱舜蟮墓δ芎挽`活性。事實上,下一章的大部分都用來介紹方法。然而,你現(xiàn)在需要學習一些基礎(chǔ)以便你能開始把方法加到你的類中。

這是方法一般的形式:

type name(parameter-list) {
// body of method
}

其中,type 指定了方法返回的數(shù)據(jù)類型。這可以是任何合法有效的類型,包括你創(chuàng)建的類的類型。如果該方法不返回任何值,則它的返回值type 必須為void 。方法名由name 指定。除了被當前作用域中的其他項使用的標識符以外,方法名可以是任何合法的標識符。parameter-list (自變量列表)是一系列類型和標識符對,用逗號分開。自變量本質(zhì)上是變量,它接收方法被調(diào)用時傳遞給方法的參數(shù)值。如果方法沒有自變量,那么自變量列表就為空。

對于不返回void 類型的方法,使用下面格式的return語句,方法返回值到它的調(diào)用程序:

return value;

其中,value 是返回的值。接下來,你將看到怎樣創(chuàng)建多種類型的方法,包括帶參數(shù)的和那些有返回值的方法。

6.4.1 為Box類添加一個方法

盡管創(chuàng)建一個僅包含數(shù)據(jù)的類是相當不錯的事情,但這樣的情況很少發(fā)生。大部分情況是你將使用方法存取由類定義的實例變量。事實上,方法定義大多數(shù)類的接口。這允許類實現(xiàn)函數(shù)可以把內(nèi)部數(shù)據(jù)結(jié)構(gòu)的特定布局隱蔽到方法抽象后面。除了定義提供數(shù)據(jù)的存取的方法,你也可以定義被類的內(nèi)部自己所使用的方法。

讓我們由對Box 類增加一個方法開始?;仡櫼幌虑懊嬗嬎愫凶芋w積的例子,你會發(fā)現(xiàn)用Box 類有時會比使用BoxDemo 類能更好地處理這個問題。不管怎么說,一個盒子的體積依賴于盒子的大小,這就是我們想到用Box類來計算盒子的體積。為了做到這一點,你必須對Box類增加一個方法,示例如下:

// This program includes a method inside the box class.

class Box { double width; double height; double depth;

// display volume of a box void volume() { System.out.print("Volume is ");
System.out.println(width * height * depth);
}
}

class BoxDemo3 {

public static void main(String args[]) {
Box mybox1 = new Box();
Box mybox2 = new Box();

// assign values to mybox1's instance variables
mybox1.width = 10;
mybox1.height = 20;
mybox1.depth = 15;

/* assign different values to mybox2's

instance variables */
mybox2.width = 3;
mybox2.height = 6;
mybox2.depth = 9;

// display volume of first box
mybox1.volume();

// display volume of second box
mybox2.volume();
}
}

該程序產(chǎn)生的輸出如下,與先前版本程序的輸出一樣。

Volume is 3000.0
Volume is 162.0

注意看下面兩行程序:

mybox1.volume ();
mybox2.volume ();

該例的第一行調(diào)用mybox1 的volume() 方法。也就是,它使用對象名加點號運算符調(diào)用mybox1 對象的volume() 方法。這樣,調(diào)用mybox1.volume( ) 顯示mybox1 定義的盒子的體積,調(diào)用mybox2.volume ()將顯示mybox2 定義的盒子的體積。每次調(diào)用volume() ,它都會顯示指定對象的體積。

如果你對方法調(diào)用的概念比較陌生,下列的討論將有助于澄清該概念。當mybox1.volume ( ) 被執(zhí)行時,Java 運行系統(tǒng)將程序控制轉(zhuǎn)移到volume( ) 定義內(nèi)的代碼。當volume( ) 內(nèi)的語句執(zhí)行后,程序控制返回調(diào)用者,然后執(zhí)行程序調(diào)用的下一行語句。Java 執(zhí)行方法的過程類似于子程序的運行。

在volume() 方法中有一些需要注意的地方:實例變量width,height 和depth 被直接引用,并沒有在它們前面加對象名或點號運算符。當一個方法使用由它的類定義的實例變量時,它可以直接這樣做,而不必使用顯式的對象引用和使用點號運算符。這是很容易理解的。一個方法總是被它的類的對象調(diào)用。只要這個調(diào)用過程一發(fā)生,對象就是可見的。因此,在方法中就沒有必要二次指定對象了。這意味著,volume() 中的width,height 和depth 已經(jīng)隱含地引用了調(diào)用volume() 方法中的這些變量的拷貝。

讓我們復習一下:當一個實例變量不是被該實例變量所在類的部分代碼訪問時,它必須通過該對象加點運算符來訪問。但是當一個實例變量被定義該變量的類的代碼訪問時,該變量可以被直接引用。同樣的規(guī)則也適用于方法。

6.4.2 返回值
執(zhí)行volume() 方法確實將計算盒子體積的值返回到Box類,但這并不是最好的方法。例如,你的程序的其他部分如何知道一個盒子的體積,而不顯示它的值?一個更好地實現(xiàn) volume() 的方法是將它計算的盒子體積的結(jié)果返回給它的調(diào)用者。下面的例子是對前面程序的改進,它正是這樣做的:

// Now,volume() returns the volume of a box.

class Box { double width; double height; double depth;

// compute and return volume double volume() { return width * height * depth;}}

class BoxDemo4 {

public static void main(String args[]) {
Box mybox1 = new Box();
Box mybox2 = new Box();
double vol;

// assign values to mybox1's instance variables
mybox1.width = 10;
mybox1.height = 20;
mybox1.depth = 15;

/* assign different values to mybox2's

instance variables */
mybox2.width = 3;
mybox2.height = 6;
mybox2.depth = 9;

// 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() 被調(diào)用時,它被放在賦值語句的右邊。左邊是接收volume() 返回值的變量。因此,當下面的語句執(zhí)行后,

vol = mybox1.volume();

變量mybox1.volume ( ) 的值是 3,000,且該值被保存在vol 中。

對于返回值的理解,要注意下面兩件重要的事情:

·
方法返回的數(shù)據(jù)類型必須與該方法指定的返回類型相兼容。例如,如果一個方法的返回值是布爾型,就不可能返回整數(shù)。
·接收方法返回值的變量
(例如本例中的變量 vol) 也必須與指定方法返回值的類型相兼容。
另外一點:因為實際上不需要vol 變量,前面的程序可以被寫得更高效一些。對volume( ) 方法的調(diào)用可以直接用在println ( ) 語句中,如下面的語句:

System.out.println("Volume is " + mybox1.volume());

在本例中,當println ( ) 被執(zhí)行時,mybox1.volume ( ) 將自動地被調(diào)用,而且它的值會被傳遞給println ( ) 。

6.4.3 加入帶自變量的方法
大多數(shù)方法不需要自變量。自變量對方法沒有特殊要求。也就是說,帶自變量的方法,可以完成各種數(shù)據(jù)操作,它還可以用在很多有微妙差別的情況。為了說明這一點,讓我們舉一個非常簡單的例子。下面的方法返回數(shù)字10的平方:

int square()

{ return 10 * 10;

}

運行該方法,確實返回了10 的平方的值,但它的使用是很有限的。然而,如下所示,如果你修改該方法,以便它帶一個自變量,這樣square( ) 就更有用了。

int square(int i)

{ return i * i;

}

現(xiàn)在,square() 可以返回任何調(diào)用它的值的平方。也就是說,square() 現(xiàn)在是可以計算任何整數(shù)值的平方的一個通用方法,而不單純是數(shù)字10 。

下面是一個例子:

int x,y;x = square(5); // x equals 25x = square(9); // x equals 81y = 2;x = square(y); // x equals 4

在第一次調(diào)用square( ) 時,值5被傳遞給自變量i。在第二次調(diào)用時,i接收到值9。第三次調(diào)用時,將值傳遞給y,在本例中是 2 。如這些例子所示,square ( ) 可以返回傳遞給它的任何數(shù)據(jù)的平方。

區(qū)分自變量(parameter )和參數(shù)(argument )這兩個術(shù)語是很重要的。自變量是方法定義的一個變量,當方法被調(diào)用時,它接收一個值。例如在square() 中,i就是一個自變量。參數(shù)是當一個方法被調(diào)用時,傳遞給該方法的值。例如,square(100) 把100 作為參數(shù)傳遞。在square()中,自變量i接收該值。

可以使用一個帶自變量的方法來改進Box 類。在前面的例子中,每個盒子的尺寸不得不用單獨的語句順序的來設(shè)置,例如:

mybox1.width = 10;
mybox1.height = 20;
mybox1.depth = 15;

本例中的代碼在執(zhí)行時,它在兩個方面比較麻煩。首先,它笨拙且容易發(fā)生錯誤。例如,很容易忘記設(shè)置其中的一個尺寸。其次,在設(shè)計的很好的Java 程序中,實例變量應(yīng)該僅僅由定義類的方法來存取。在后面,你可以改變一個方法的行為,但是你不能改變一個暴露的實例變量的行為。

這樣,設(shè)置一個盒子尺寸的更好的途徑是創(chuàng)建一個自變量代表盒子尺寸的方法,而且適當?shù)卦O(shè)置每個實例變量。下面的例子實現(xiàn)了這個想法。

// This program uses a parameterized method.

class Box { double width; double height; double depth;

// compute and return volume double volume() { return width * height * depth;}

// sets dimensions of box

void setDim(double w,double h,double d) {width = w; height = h;depth = d;

}
}

class BoxDemo5 {

public static void main(String args[]) {
Box mybox1 = new Box();
Box mybox2 = new Box();
double vol;

// initialize each boxmybox1.setDim(10,20,15);mybox2.setDim(3,6,9);
// 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);

}
}

正如你看到的,setDim 方法用來設(shè)置每個盒子的尺寸,例如,當下面的語句執(zhí)行后:mybox1.setDim(10,20,15);

10被拷貝進參數(shù)w,20被拷貝進h,15被拷貝進d。在setDim( ) 內(nèi)的w、h、d的值分別賦給width 、height 和depth 。

許多讀者,特別是那些有C/C++ 經(jīng)驗的讀者,對前面章節(jié)中的概念會比較熟悉。但是,如果像方法調(diào)用、參數(shù)、自變量這些概念對你來說比較新的話,在繼續(xù)學習以前,你要花些時間來練習。方法調(diào)用,自變量,返回值這些概念是Java 編程的基礎(chǔ)。

網(wǎng)頁題目:java方法(轉(zhuǎn))
URL分享:http://muchs.cn/article6/iidsig.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、外貿(mào)建站域名注冊、ChatGPT網(wǎng)站改版、電子商務(wù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站