4.1 方法
方法是Java中一个命名的代码块,如同在数学中用到的函数,在其他语言中常直接称为函数。
方法通常是为完成一定的功能,把程序中特定的代码块组合在一起而构成的,其主要的好处体现在两个方面,一个是可以重用,另一个是使程序结构更加清晰。
Java方法概述
[修饰符] 返回值类型 方法名([形参列表]){
方法体
}
其中,大括号前面的内容称为方法头,大括号里面的称为方法体。
- 修饰符:用来规定方法的一些特征,例如它的可见范围以及如何被调用。我们一直在使用的main方法,其中的public static就是修饰符,public表示这个方法的可见范围,而static表示main方法是一个静态方法。
- 返回值类型:表示该方法返回什么样类型的值。方法可以没有返回值,这时需要用void表示返回值类型。不过一旦一个方法需要返回值时,那么方法体里就必须使用return语句返回此类型的值。return也是一种跳转语句,和前面学过的break语句和continue语句一样,不同点在于方法执行到return语句后,会返回给主调方法。一个方法只能有一个返回值,因此也只能有一个返回值类型。如果逻辑上确实需要返回多个值,则可以将需要返回的“多个值”先转为一个数组或一个对象,然后再返回转变后的这“一个值”。
- 方法名:必须符合标识符的命名规则。
- 形参列表:参数用来接收外界传来的信息,可以是一个或多个,也可以没有参数,但无论是否有参数,必须有小括号。方法中的这些参数称为形式参数,简称形参,形参必须说明数据类型。
- 如果声明了多个方法,那么多个方法之间不能相互嵌套。
- 选择、循环等逻辑代码,都必须写在方法的内部。
在类内部调用方法很简单,只需给出方法名以及方法的实际参数列表(实参列表的数据类型必须与形参列表一致或可以自动转换成形参列表的格式)即可。如果方法有返回值,则可以赋值给相应类型的变量。例如:
int x = returnAdd(3 + 5);
drawStar(8);
JDK本身也提供了很多的方法,System.out.println()为用户向控制台输出方法,nextInt()方法(Scanner类)为从控制台获取用户输入的整数方法,Math.sqrt(i)为求i的平方根方法等。
方法递归调用
递归调用是指一个方法在它的方法体内调用它自身。Java语言允许方法的递归调用,在递归调用中,主调方法同时也是被调方法。执行递归方法将反复调用其自身,每调用一次就再进入一次本方法。
递归调用最大的问题是,如果递归调用没有退出的条件,则递归方法将无休止地调用其自身,这显然是不正确的。为了防止递归调用无休止地进行,必须在方法内有终止递归调用的手段。通常的做法就是增加条件判断,满足某条件后就不再进行递归调用,然后逐层返回。