函数(方法)详解
一.静态方法
概念:特定功能的代码块。
好处:减少了代码的冗余
方法的分类:静态方法、成员方法、构造方法
注意:
1.方法编写的位置:类里
2.方法与方法之间是平级关系(不能在一个方法中声明另一个方法)
3.方法不被调用,永远就是个摆设
方法的语法结构分类:
1.无返回值无参数的方法
语法结构:
访问修饰符 static void 方法名(){
…代码块…
}2.有参数的方法 语法结构: 访问修饰符 static void 方法名(参数类型 变量名){ ...代码块... } 注意: 1.形参:形式参数,方法声明时,规定调用时要传入的数据类型及接收数据的变量 2.实参:实际参数,调用方法时传入的具体数据 3.实参与形参类型必须兼容 4.多个参数用逗号分隔 3.有返回值的方法 语法结构: public static 返回值类型 方法名([参数]){ ...代码块... return 返回数据; } 注意: 1.方法功能单一性 2.return下面不能接执行语句,因为return表示结束当前方法 3.声明方法时规定返回值类型 4.return后面接的是要返回的具体数据 5.声明方法时规定的返回值类型必修和return后的数据类型兼容 6.方法A中有a和b的变量,方法B中也a和b的变量,这几个变量不互相冲突,因为方法中的变量叫做局部变量,作用域在该方法内
二. 方法的重载
含义:方法与方法之间的关系
好处:系统会根据实参类型自动匹配到对应方法
条件:
1.在同一个类里
2.方法名一致
3.参数列表的个数或者类型不一致
4.与返回值无关应用场景:
在同一个类里,有多个方法功能一致,细节实现不一样,就可以考虑使用重载
/** 需求:编写一个方法,求两个int之和
需求:编写一个方法,求三个int之和
需求:编写一个方法,求两个double之和
需求:编写一个方法,求三个double之和
需求:编写一个方法,求两个int最大值
需求:编写一个方法,求三个int最大值
需求:编写一个方法,求四个int最大值
*/
public static void main(String[] args){
System.out.println(add(10,20));
System.out.println(getMax(10,20,30,40));
}
public static int getMax(int a,int b){
return (a>b)?a:b;
}
public static int getMax(int a,int b,int c){
int max = getMax(a,b);
max = getMax(max,c);
return max;
}
public static int getMax(int a,int b,int c,int d){
int max = getMax(a,b);
max = getMax(max,c);
max = getMax(max,d);
return max;
}
public static int add(int a,int b){
return a+b;
}
public static int add(int a,int b,int c){
return a+b+c;
}
public static double add(double a,double b){
return a+b;
}
public static double add(double a,double b,double c){
return a+b+c;
}
三. 递归
概念:方法调用方法自身
public static void main(String[] args){
/**
错误示范:方法死循环的调用方法自身
该代码会导致栈内存溢出的错误
原因:调用方法,就会在栈内存中开辟空间,用于存放该方法的局部变量,
死循环的调用方法,栈内存就会满载并溢出
*/
method();
}
public static void method(){
method();
}
//需求:编写一个方法,传入n,求n的阶乘
public static void main(String[] args){
int num = method(5);
System.out.println(num);
}
public static int method(int n){
if(n != 1){
return method(n-1)*n;
}else{
return 1;
}
}
/** 面试题重点!!!
需求:有一对兔子,从出生后第3个月起每个月都生对兔子,
小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,
问n月的兔子总数为多少?
找规律:当月兔子个数 = 上月兔子个数+上上月兔子个数
找出口:第一个月和第二个月兔子都是1对
其实就是菲波那切数数列的规律
*/
public static void main(String[] args){
System.out.println(getRabbit(9));
}
public static int getRabbit(int month){
if(month==1 || month==2){
return 1;
}else{
return getRabbit(month-1) + getRabbit(month-2);
}
}