方法
方法是具有某项功能的代码块
方法不调用不执行
方法存在与类中方法外,不能嵌套
有返回值
需要获得方法的返回值时使用
修饰符 返回值类型 方法名([参数]){
方法体;
return 返回值;
}
修饰符:访问权限
返回值类型:在有返回值的方法结束之后所返回的数值的类型
参数:
形参:写在方法的()内,不限数量,数据类型可以为基本类型也可以为引用类型,形参相当于局部变量的声 明,形参在没有需要的时候可以忽略
实参:调用方法时()中的参数,需要与调用的方法中的形参数据类型,顺序一一对应
每个参数之间用,隔开
有返回值的方法的调用:
直接调用: 方法名();
赋值调用: 数据类型 变量名=方法名(参数);
赋值调用接收的是调所用方法的返回值
输出调用: System.out.println(方法名(参数));
输出调用打印的是所调用方法的返回值
//求两个数的和的方法
public static int sum(int a,int b){
System.out.println("有返回值的方法");
return a+=b; //return:存在于方法中,有返回值的方法中必须有return,return结束方法,并返回返回值
}
//在主方法中调用
public static void main(String[] args){
//直接调用
sum(1,2); //执行方法语句,有返回值,但是没接收
//赋值调用
int sum1 =sum(1,2) //将返回值赋值给sum1
//输出调用
System.out.println(sum(1,2)); //打印返回值 3
}
无返回值
修饰符 void 方法名([参数]){
方法体;
[return;]
}
void:表示没有返回值
无返回值的调用:
直接调用
//打印99乘法表
public static void table(){
for(int i=1;i<=9;i++){//控制行数为9行
for(int j=1;j<=i;j++){//每行打印的列数与行数相同
System.out.print(j+"*"+i+"="+j*i+"\t");//循环列数*行数
}
System.out.println();//换行
}
}
public static void main(String[] args){
//直接调用
table();//调用table方法,执行方法体语句 打印99乘法表
}
方法实参的数据类型必须<=形参的数据类型
返回值的数据类型<=方法的返回值类型<=接收返回值的数据类型
在java中,方法定义时,因为形参时声明局部变量,所以实参没有默认值
方法的重载
在同一个类中,有多个方法名相同但是参数列表不同的方法,就可以构成方法的重载
参数列表的不同体现为:
参数的个数不同
参数的数据类型不同
不同类型的参数顺序不同
方法的重载可以将一些功能相似的方法归类,可以优化代码,方便开发人员的使用
//将需要不同数据类型求和的方法构成重载
/*
重载方法,只和方法名与参数列表有关
方法的重载和修饰符的无关
方法的重载和有无反回值无关
方法的重载和返回值类型无关
方法的重载和参数的名字无关
*/
private static String getSum(int a,int b){
System.out.println("int int");
System.out.println(a+b);
return "";
}
//求三个整数的和
public static void getSum(int a,int b,int c){
System.out.println("int int int");
System.out.println(a+b+c);
}
//求两个小数的和
public static void getSum(double d1,double d2){
System.out.println("double double");
System.out.println(d1+d2);
}
//求三个小数的和
public static void getSum(double d1,double d2,double d3){
System.out.println("double double double");
System.out.println(d1+d2+d3);
}
//方法的调用
public static void main(String[] args){
getSum(实参);//可以输入重载方法中对应任意一个方法的参数列表
}
一个方法的重载特性,是类中多态的一种表现
一个类中方法是封装的一种体现
递归
方法的内调用本方法,是一种非常消耗内存的方式
递归的组成:
递归头:停止自己调用自己的条件(因为递归会形成死循环,所以必须要递归头,而且递归头必须在方法的最开始)
递归体:自己调用自己
递归阶段:
递归前进段:到达临界条件之前一直调用本方法
临界条件:停止一直调用本方法的条件
递归返回段:从临界条件开始,将结果逐步返回调用层
//阶乘 求某个数的阶乘 5*4!
public static int test(int i){
if(i==1){
return 1;
}
return i*test(i-1); //5*4!-->5*4*3!-->...到i=1时到达临界条件
}
//用递归打印99乘法表
public static void table(int i){
if(i==1){//临界条件
System.out.print(i+"*"+i+"="+i*i);
System.out.println();
}else{
table(i-1);//利用代码右上而下及递归返回段的特性,达到打印99乘法表
for(int j=1;j<=i;j++){
System.out.print(j+"*"+i+"="+i*j+"\t");//打印列
}
System.out.println();
}
}
//调用方法
public static void main(String[] args){
table(9);
}