方法
理解:特定功能的代码块
好处:解决代码的冗余
语法结构:
访问修饰符 static 返回值类型 方法名([参数列表]){
...代码块...
}
分类: 无参数无返回值的方法
带参数的方法
带返回值的方法
注意: 1.public是访问修饰符的一种,表示公有的
2.void表示无返回值(关键字)
3.方法在类中声明
4.方法与方法之间是平级关系
5.方法没被调用,就是个摆设
6.静态方法(static修饰的方法)可以直接访问同个类中的其他静态方法,访问
非静态方法时,必须先创建类的实例化对象来间接调用
public class Test { public static void main(String[] args) { Test t = new Test(); t.test(); } public void test(){ System.out.println("1111"); } }
一、无参数无返回值的方法
语法结构: public static void 方法名(){ ...代码块 }
public static void main(String[] args) { test(); } public static void test(){ System.out.println("1111"); }
二、带参数的方法
语法结构:
public static void 方法名(参数列表){
...代码块...
}
注意:
1.形式参数/形参:声明方法时规定的参数
2.形参必须声明类型
3.形参属于该方法的变量,作用域就在该方法内,形参也是局部变量
4.局部变量:方法里声明的变量
5.实际参数/实参:调用方法时传入的数据
6.实参和形参的类型必须兼容
7.实参和形参可以有多个,用逗号分割
public static void main(String[] args){ getMax(10,20); } public static void getMax(int a,int b){ int max = (a>b)?a:b; System.out.println("最大值为:" + max); }
三、带返回值的方法
语法结构:
public static 返回值类型 方法名([参数列表]){
...代码块...
return 数据;//1.结束当前方法 2.将数据返回给调用方
}
注意:
1.带返回值的方法有没有参数要看具体需求
2.声明方法时需要设置返回值类型
3.return后接的是需要返回的具体数据
4.方法功能单一性(一个方法的功能不要过于强大)
5.方法声明时规定的返回值类型 和 return后的数据 必须兼容
6.返回值只能有一个,如果想返回多个值就必须使用数组、集合、....
public static void main(String[] args){ int max = getMax(a,b); System.out.println("最大值为:" + max); } public static int getMax(int a,int b){ int max = (a>b)?a:b; return max; }
四、方法的重载
概念:方法之间的关系
条件:
1.在同一个类中
2.方法名必须一致
3.参数列表的个数或者类型不一致
4.与返回值无关
好处:系统会根据实参类型自动匹配到对应的方法中
应用场景:在同一个类中,多个方法功能大概一致,但是细节实现不一致,就可以考虑使用重载
public static void main(String[] args){ //打印getMax方法,前提是该方法必须有返回值 System.out.println(getMax(20,30)); System.out.println(getMax(10.1,20,30)); } public static int getMax(int a,int b){ return a+b; } public static int getMax(int a,int b,int c){ int max = (a>b)?a:b; max = (max>c)?max:c; return max; } 输出结果: 50 30
五、方法的递归
含义:方法调用方法自身
注意:递归是一种程序设计的思想
经验:
1.找规律:什么情况下方法应该调用方法自身
2.找出口:什么情况下应该解决该方法
/**需求:设计一个方法,传入一个int值n,求n的阶乘 分析: 5! = 1*2*3*4*5 -> 5! = 4! * 5 4! = 1*2*3*4 -> 4! = 3! * 4 3! = 1*2*3 -> 3! = 2! * 3 2! = 1*2 -> 2! = 1! * 2 1! = 1 -> 1! = 1 找规律:n! = (n-1)! * n 找出口:1! = 1 */ public static void main(String[] args){ int num = getFactorial(5); System.out.println(num); } public static int getFactorial(int n){ if(n != 1){ return getFactorial(n-1) * n; }else{ return 1; } }需求:不死神兔问题: 有1对兔子,从出生后的第3个月起每个月都生一对兔子, 小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第n个月有几对兔子 设计一个方法,传入月份,获取当月兔子的对数
分析:
找规律:当月兔子的对数等于上个月+上上个月兔子的对数 找出口:1月或2月都是1对兔子
扩展: 不死神兔的数据:1,1,2,3,5,8,13,21... 这种数列叫做斐波那契数列/黄金分割数列
该数列相邻两个数的比例越往后越趋近于0.618
public static void main(String[] args){ int num = getRabbit(10); System.out.println(num); } public static int getRabbit(int month){ if(month == 1 || month == 2){ return 1; }else{ return getRabbit(month-1) + getRabbit(month-2); } }