第三章 方法
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);
}
}