方法的定义,重载与递归
一.方法-结构与定义
方法顾名思义就是用来解决一类问题的代码的有序组合,是一个功能模块。可以多次调用。
1.方法的结构:
修饰符 返回值类型 方法名(参数){
//方法体
}
例如:public static int add(int a,int b){
return a+b;
}
2.方法的定义:
1)修饰符:告诉编译器如何调用该方法。定义了该方法的访问类型
2)在定义方法的时候对于方法的返回值有以下的两类:
void:没有返回值;//可用throw new
RuntimeException抛出异常
数据类型(基本类型,引用类型)//用return返回。
3)方法名:是方法实际的名称。方法和参数共同构成方法名。
4)参数类型:用于限定调用方法时传入参数的数据类型(称为形参,被调用传递给参数的值成为实参)
3.定义的举例:
例:定义一个方法完成年份是否闰年的判定?
public boolean isLeap(long year) {
if(year<=0) {
throw new RuntimeException("输入的年份不合法");
}
boolean f = ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0);
return f;
}
方法之间是可以互相调用的,调用方法的时候需要试用一对小括号。
二.方法-重载
1.方法重载概述:java同一个类中包含了两个或两个以上方法名相同的方法,但形参列表不同,这种情况被称为方法重载。
2.方法重载特点:
1)与返回值类型无关, 只看方法名和参数列表(包括参数的类型、参数的个数和参数的顺序)
2)调用方法时,jvm会通过参数列表的不同来区分同名方法
3.方法重载举例:
public int add(int a , int b){
return a + b;
}
public int add(int a, int b, int c){
return a + b;
}
public double add(double a , int b){
return a + b;
}
public double add(double a , double b){
return a + b;
}
通过上面的例子,可以看出重载是在一个类中,有相同的方法名,形参不同且与返回类型无关。重载可以让一个程序段尽量减少代码和方法的种类。
三.方法-递归
1.递归的概述:程序调用自身的编程技巧称为递归
2.递归的要素:
1)方法内有边界条件(即方法终止条件)
2)定义算法
2.递归的应用:
例1:计算一个数字的阶乘。
循环方式:
public void test() {
int a = 5;
System.out.println(JieChen(a));
}
public int JieChen(int a) {
int s = 1;
for (int i = 2; i <= a; i++) {
s *= i;
}
return s;
}
递归方式:
public void test() {
int a = 5;
System.out.println(R(a));
}
/*
* 递归
*/
public int R(int a) {
if (a == 1) {//边界条件
return 1;
}
return a * R(a - 1);//定义算法。R(a-1)将在R方法里多次递归,直到a-1=1时返回最终值。
}
例2:使用递归判定数组中的元素是否有序(假设升序为有序)
public void test() {
int[] a = { 5, 4, 3, 2, 1 };
System.out.println(isSort(a, a.length));
}
/*
* 递归
*/
public boolean isSort(int[] a, int index) {
if (index == 1) {//边界条件
return true;
}
if (a[index - 1] < a[index - 2]) {//算法
return false;
} else {
return isSort(a, index - 1);
}
}
由上面的例子,可以看出递归的条件
1.解决问题的算法和思路相同
2.需要有边界条件
3.需要定义算法
递归可以使问题简单化。