原文出自 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方法返回原生类型。方法也可以放回引用类型。例如,在程序中操纵
Bicycle
objects,我们也许会这么做:
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的子类,如下图所示:
ImaginaryNumber类层次结构
假如有这么一个方法返回Number:
public Number returnANumber() { ... }
returnANumber方法可以返回
ImaginaryNumber,但是不能返回一个Object。
ImaginaryNumber是一个Number类,因为它是
Number的子类。尽管如此,一个Object类未必是Number—它可以是一个String或者是其他类型。
public ImaginaryNumber returnANumber() { ... }
这种技术称为协变返回类型,返回类型允许是多个子类,但是是同一分支。
注意:你也可以使用接口作为返回类型,这个情况下,返回的对象必须实现了这个接口。