简单,可复制

点点滴滴,尽在文中

  :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

 原文出自 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() {
    ...
}

这种技术称为协变返回类型,返回类型允许是多个子类,但是是同一分支。

注意:你也可以使用接口作为返回类型,这个情况下,返回的对象必须实现了这个接口。

posted on 2012-11-29 22:44  ggjucheng  阅读(5485)  评论(0编辑  收藏  举报