第三章 方法
4.1 方法的概述
**定义:**方法是将具有独立功能的代码块组织成一个整体,使其具有特殊功能的代码集
注意:
- 方法定义在类中方法外,方法本身不能嵌套
- 方法不调用不执行
优点:
- 提高了代码的复用性
- 提供了程序的安全性
4.2 方法的定义和调用
4.2.1 方法的定义
1、没有返回值类型的方法
格式:
修饰符 void 方法名(参数列表){
	实现功能的代码块;
    [return;]
}
范例:
//输出m行乘法表
public class Test13 {
    public static void main(String[] args) {
       print(2);
    }
    public static void print(int m){
        for (int i=1;i<=m;i++){
            for (int j=1;j<=i;j++){
                System.out.print(j+"*"+i+"="+i*j+"\t");
            }
            System.out.println();
        }
    }
}
2、有返回值类型的方法
格式:
修饰符 数据类型 方法名(参数列表){
	实现功能的代码块;
	return 返回值;
}
范例:
//获取两个数中的较大值
public class Test11 {
    public static void main(String[] args) {
        int max=getMax(4,9);
        System.out.println(max);
    }
    public static int getMax(int x,int y){
        return Math.max(x, y);
    }
}
参数列表 :
功能定义的时候是否存在未知的数据,有可能会改变的数据,如果存在,参数列表中定义参数,如果不存在,可以不定义参数。
**格式:**数据类型1 参数名2,数据类型2 参数名2……
- 相当于局部变量的声明 ===> 作用域只属于当前的方法
- 数据类型 : 可以为基本数据类型|引用数据类型
4.2.2 方法的调用
方法的调用 :
执行方法中的代码
- 基础调用 : 方法名(参数列表);
- 赋值调用 : 数据类型 变量名 = 方法名(参数列表);
- 输出调用 : System.out.println(方法名(参数列表));
赋值调用与输出调用关注返回值,接收使用了返回值,基础调用只是执行方法中的代码没有接收返回值
注:
- 方法必须先定义再调用,否则程序将报错
参数列表 : 功能定义的时候是否存在未知的数据,有可能会改变的数据,如果存在,参数列表中定义参数,如果不存在,可以不定义参数。
 **格式:**数据类型1 参数名2,数据类型2 参数名2……
- 相当于局部变量的声明 ===> 作用域只属于当前的方法
- 数据类型 : 可以为基本数据类型|引用数据类型
public class MethodDemo1 {
    public static void main(String[] args) {
		//常量的调用
        isEvenNumber(10);	//实参 
        //变量的调用
        int number=10;
        isEvenNumber(number);	//实参		
    }
    //需求:定义一个方法,用该方法接受一个数据,判断该数据是否是偶数
    public static void isEvenNumber(int number){	//形参
        if(number%2==0){
            System.out.println(true);
        }else{
            System.out.println(false);
        }
    }
}
4.3 形参和实参
- 形参
定义方法时候()中的参数–>局部变量的声明
等同于变量定义格式 例如:int number
- 实参
调用方法时候()中的参数–>局部变量的赋值
等同于使用变量或者常量 例如:number 或者 10
注:
形参与实参之间要求一一对应
public class MethodDemo1 {
    public static void main(String[] args) {
		//常量的调用
        isEvenNumber(10);	//实参 
        //变量的调用
        int number=10;
        isEvenNumber(number);	//实参		
    }
    //需求:定义一个方法,用该方法接受一个数据,判断该数据是否是偶数
    public static void isEvenNumber(int number){	//形参
        if(number%2==0){
            System.out.println(true);
        }else{
            System.out.println(false);
        }
    }
}
兼容类型 :
-  参数兼容类型 - 形参类型 >= 实参类型
 
-  返回值兼容类型 - 接收返回值的变量类型>=方法的返回值类型>= return后面结果的类型
 
4.4 方法重载
4.4.1 方法重载的概述
方法重载指同一个类中定义的多个方法之间的关系,满足下列条件的多个方法相互构成重载
- 一个类中的多个方法
- 多个方法具有相同的方法名
- 多个方法的参数列表不同 
  - 参数数量不同、参数类型不同、不同类型的参数顺序不同
 
4.4.2 方法重载的特点
- 重载仅对应方法的定义 与方法的调用无关
- 重载仅针对同一个类中方法的名称与参数列表进行识别,与修饰符、参数名、返回值、无关
- 重载方法的调用 根据实参区分
范例:
public class MethodDemo5 {
    public static void main(String[] args) {
        int sum=add(12,23);
        double sum1=add(1.2,5.3);
        int sum2=add(12,85,96);
        System.out.println(sum);
        System.out.println(sum1);
        System.out.println(sum2);
    }
    //需求一:求两个int类型数据和的方法
    public static int add(int a,int b){
        return a+b;
    }
    //需求二:求两个double类型数据和的方法
    public static double add(double a,double b){
        return a+b;
    }
    //需求三:求三个int类型数据和的方法
    public static int add(int a,int b,int c){
        return a+b+c;
    }
}
4.4.3 递归 (了解)
方法的内部自己调用自己
- 优点 :
 程序设计更简单,简洁
- 缺点 :
 使用不好,极有可能造成内存的溢出
- 实现组成: 
  - 基线条件|递归头 : 停止自己调用自己的条件
- 递归条件|递归体 : 自己调用自己
 
- 执行过程 : 
  - 递归前进段 : 不停的自己调用自己
- 临界条件 : 停止自己调用自己的条件
- 递归后退段 : 从临界条件开始,不停的将结果返回给上一层
 
范例:
public class Class039_Recurtion{
	
	public static void main(String[] args) {
		System.out.println(rec(-1));;
	}
	
	//求阶乘 : 求某一个数阶乘
	public static int rec(int i){
		if(i<=0){
			System.out.println("数据i为负数,不能求阶乘!!!");
			return 0;
		}
		if(i==1){
			return 1;
		}
		return i*rec(i-1);
	}
}









