在程序之中很多情况下是有可能重复执行一些代码,方法的本质就是方便使用者进行重复的调用。
方法的基本定义
public static 返回值类型 方法名称([参数类型 变量,....]) {
// 该方法要执行的代码
[return [返回值] ;]
}
对于返回值而言可以使用java中定义的数据类型,在方法中进行返回数据的处理,如果要返回数据则可以使用return描述,return返回的数据类型与方法返回值类型相同。
如果没有返回值,方法用void声明。
1.无参数无返回值的方法
public class JavaDemo {
public static void main(String args[]) {
printMessage() ; // 执行方法调用
printMessage() ; // 执行方法调用
}
//定义了一个方法
public static void printMessage() { // 该方法包含了三行代码
System.out.println("**************************") ;
System.out.println("* www.mldn.cn *") ;
System.out.println("**************************") ;
}
}
2.有参数,有返回值
public class JavaDemo {
public static void main(String args[]) {
String result = get(20.0) ;
System.out.println(result) ;
System.out.println(get(1.0)) ; // 返回值可以直接输出
}
public static String get(double money) {
if (money >= 10.0) {
return "给你带一份快餐,找零:" + (money - 10.0) ;
} else {
return "对不起,您的余额不足,请先充值,或者捡漏。" ;
}
}
}
3.进行方法的定义时,方法的返回值类型为void时,那么可以利用return来结束调用。
public class JavaDemo {
public static void main(String args[]) {
sale(3) ;
sale(-3) ;
}
public static void sale(int money) {
if (money <= 0) { // 余额不足
return ; // 后续代码不执行了 方法的结束
}
for (int x = 1 ; x <= money ; x ++) {
System.out.println("王健开笑,第" + x + "次") ;
}
}
}
方法就是一段可以重复调用 的代码块,在java定义方法时,不会太长。
方法的重载
定义:当方法名称相同,参数的类型或个数不同的时候就称为方法的重载。
public class JavaDemo {
public static void main(String args[]) {
int resultA = sum(10,20) ; // 调用两个int参数的方法
int resultB = sum(10,20,30); // 调用三个int参数的方法
double resultC = sum(10.2,20.3) ;
System.out.println("加法执行结果:" + resultA) ;
System.out.println("加法执行结果:" + resultB) ;
System.out.println("加法执行结果:" + resultC) ;
}
public static int sum(int x,int y) {
return x + y ;
}
public static int sum(int x,int y,int z) {
return x + y + z ;
}
public static double sum(double x,double y) {
return x + y ;
}
}
可以发现同一个方法名称,可以根据调用时传递的参数个数或类型实现不同方法体的调用,实现了方法的重载。
注意:方法的重载与方法的返回类型没有关系,只与传递的参数有关系,但是在实际开发中,记住一个开发原则:只要是方法重载强列要求方法的返回值类型相同。
System.out.println可以实现各种数据类型的输出,System.out.println本身就是一个方法的重载,这个方法的重载是由系统提供的。
方法的递归调用:
方法的递归调用是指一个方法自己调用自己的情况,利用递归调用可以解决一些重复且麻烦的问题。
需要注意:
1.设置方法递归调用 的结束条件
2.每一次调用的过程中一定要修改传递参数的条件
范例:实现一到一百的累加
public class JavaDemo {
public static void main(String args[]) {
int sum = 0 ;
int x = 1 ;
while (x <= 100) { // 循环的结束条件
sum += x ;
x ++ ; // 修改每一次循环的变量
}
System.out.println(sum) ;
}
}
递归的方法:
public class JavaDemo {
public static void main(String args[]) {
System.out.println(sum(100)) ;
}
public static int sum(int num) { // 执行累加
if (num == 1) { // 不累加了
return 1 ;
}
return num + sum(num - 1) ; // 递归调用
}
}
代码分析:
1.第一次执行sum(),main主方法执行 return100+sum(99);
2.第二次执行sum()、sum()递归调用 return99+sum(98);
3.第九十九次执行sum()、sum()递归调用 return 2+sum(1);
4.第一百次执行sum()、sum()递归调用 return 1;
递归操作虽然可以简化调用,递归操作处理不当,会造成内存溢出。
范例:计算“1!+2!+...+90!”
计算阶乘首先要考虑数据类型,double
public class JavaDemo {
public static void main(String args[]) {
System.out.println(sum(90)) ;
}
public static double sum(int num) {
if (num == 1) {
return 1 ;
}
return fan(num) + sum(num - 1) ;
}
public static double fan(int num) { // 执行累加
if (num == 1) { // 不累加了
return 1 ;
}
return num * fan(num - 1) ; // 递归调用
}
}
不是必须的情况下,不建议使用递归调用。