java 方法的返回值(翻譯自Java Tutorials)


 原文出自 http://www.cnblogs.com/ggjucheng/archive/2012/11/29/2795468.html

代碼調用方法時,它會在以下情況返回:

完成方法所有的語句

出現return語句

拋出一個異常

以最先出現的為准。

在方法聲明中,會聲明方法的返回類型。方法體內,可以使用return語句返回值。

任何聲明了void的方法,不需要返回值,它非必須包含一個return語句,但是它也可以這么做。這個情況下,return語句可以用來跳出控制流的代碼塊,並退出方法,簡單使用如下:

return;

在一個聲明void的方法,返回一個值,編譯器會報錯。

不是聲明為void的方法,必須包含一個return語句,緊跟對應的返回值,就像這樣:

return returnValue;

返回值的數據類型必須匹配方法聲明的返回數據類型;不能在一個聲明返回類型是整數的方法,返回一個boolean類型的值。

下面討論的Rectangle的getArea()方法返回一個整數:

    // a method for computing the area of the rectangle
    public int getArea() {
        return width * height;
    }

這個方法返回表達式width*height計算出來的整數。

getArea方法返回原生類型。方法也可以放回引用類型。例如,在程序中操縱Bicycleobjects,我們也許會這么做:

public Bicycle seeWhosFastest(Bicycle myBike, Bicycle yourBike,
                              Environment env) {
    Bicycle fastest;
    // code to calculate which bike is 
    // faster, given each bike's gear 
    // and cadence and given the 
    // environment (terrain and wind)
    return fastest;
}

 

返回類或接口

如果本節混淆,跳過它,等到你已經完成了接口和繼承的學習再回頭看這個。

當一個方法是用類名作為返回類型,例如whosFastest的做法,返回的對象的類的類型,必須是聲明的返回類型的子類,或者就是聲明的返回類型。假設有這么一個類層次結構,ImaginaryNumber是Number的子類,Number是Object的子類,如下圖所示:

The class hierarchy for ImaginaryNumber

ImaginaryNumber類層次結構

假如有這么一個方法返回Number:

public Number returnANumber() {
    ...
}

 

returnANumber方法可以返回ImaginaryNumber,但是不能返回一個Object。ImaginaryNumber是一個Number類,因為它是Number的子類。盡管如此,一個Object類未必是Number—它可以是一個String或者是其他類型。

public ImaginaryNumber returnANumber() {
    ...
}

這種技術稱為協變返回類型,返回類型允許是多個子類,但是是同一分支。

注意:你也可以使用接口作為返回類型,這個情況下,返回的對象必須實現了這個接口。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM