javaSE_8系列博客——Java语言的特性(三)--类和对象(11)--从方法返回值

来源:互联网 发布:java php rpc框架 编辑:程序博客网 时间:2024/06/08 09:53

以下几种情况,会让一个方法返回到调用它的代码
1. 完成方法中的所有语句
2. 达到return语句
3. 抛出异常(稍后覆盖)

以第一个为例。 在方法声明中声明方法的返回类型。在方法的正文内,你使用return语句来返回值。 声明为void的任何方法都不返回值。它不需要包含return语句,但它可以这样做。在这种情况下,return语句可以用于分支出控制流块并退出该方法,并且简单地使用如下:

return;

如果您尝试从声明为void的方法返回值,则会收到编译器错误。

任何未声明为void的方法都必须包含具有相应返回值的return语句,如下所示:

return returnValue;

返回值的数据类型必须与方法声明的返回类型相匹配;您不能从声明为返回布尔值的方法返回整数值。 Rectangle Rectangle类中的getArea()方法在对象部分中讨论时返回一个整数:

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

此方法返回表达式width * height计算的整数。

getArea方法返回一个原始类型。一种方法也可以返回一个引用类型。例如,在一个程序来操纵Bicycle 对象,我们可能会有一个这样的方法:

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是java.lang.Number的子类,它又是Object的一个子类,如下图所示。
这里写图片描述
现在假设你有一个方法声明返回一个数字:

public Number returnANumber() {    ...}

returnANumber方法可以返回一个ImaginaryNumber而不是一个Object。 ImaginaryNumber是一个数字,因为它是Number的子类。但是,对象不一定是数字 - 它可以是字符串或另一种类型。 您可以覆盖一个方法并定义它以返回原始方法的子类,如下所示:

public ImaginaryNumber returnANumber() {    ...}

这种称为协变返回类型的技术意味着允许返回类型与子类方向相同。

注意:您也可以使用界面名作为返回类型。在这种情况下,返回的对象必须实现指定的接口。
0 0