Java方法详解
什么是方法?
- 方法是解决一类问题的步骤的有序集合
- 方法包含于类或对象中
- 方法在程序中被创建,在其他地方被引用
- 设计方法的原则:方法的本意是功能块,就是实现某个功能的语句块的集合,我们设计方法的时候,最好保持方法的原子性,就是一个方法只完成一个功能,这样利于我们后期的扩展
- 方法的命名规则:驼峰原则
//加法方法
public static int add(int a,int b){
return a+b;
}
方法的定义和调用
定义
Java方法类似于其他语言的函数,是用来完成特定功能的代码片段,定义一个方法包含以下语法:
修饰符 返回值类型 方法名(参数类型 参数名){
……
方法体
……
return 返回值;
}
- 修饰符:这是可选的,它告诉编译器如何调用该方法,定义了该方法的访问类型
- 返回值类型:方法可能会返回一个值,有些方法执行特定的操作,没有返回值,在这种情况下,返回值类型为空 void
- 方法名:是方法的实际名称,方法名和参数列表共同构成方法签名
- 参数类型:参数像一个占位符,当方法被调用时,外界传递值给参数,被传递的值被称为实参或变量。参数是可选的,方法可以不包含任何参数
- 形式参数:形参在方法被调用时用于接收外界输入的数据
- 实际参数:调用方法时实际传给方法的形参的数据
- 方法体:方法体包含具体的语句,定义该方法的功能
- return:return返回一个返回值的同时会结束该方法
//比大小
public static int max(int num1,int num2){
return num1>num2?num1:num2;
}
调用
-
调用方法:对象名.方法名(实参列表)
-
Java支持两种调用方法的格式
- 当方法返回有返回值时,方法调用通常被当做一个值
int larger=max(20,30);
- 如果方法返回值类型是void,没有返回值,方法调用一定是一条语句
System.out.println("Hello,World!")
-
Java的方法都是值传递而不是引用传递,C的函数既可以值传递也可以引用传递(指针)
方法的重载
- 重载就是在一个类中,有相同的函数(方法)名,但形参不同的函数(方法)
- 方法重载的规则:
- 方法名称必须相同
- 参数(形参)列表必须不同,个数不同、类型不同、参数排列顺序不同等
- 方法的返回类型可以相同也可以不相同
- 仅仅返回类型不同不足以成为方法的重载
- 实现理论
- 方法名称相同时,编译器会根据调用方法的参数个数、参数类型等去逐个匹配,以选择对应的方法,如果匹配失败,则编译器报错
命令行传递参数(了解)
-
略
public static void main(String[] args) { for (int i = 0; i < args.length; i++) { System.out.println("args["+i+"]:"+args[i]); } }
可变参数
-
JDK 1.5开始,Java支持传递同类型的可变参数给一个方法(本质是数组!)
-
在方法声明中,在指定参数类型后加一个省略号(…)
-
在一个方法中只能指定一个可变参数,它必须是方法的最后一个参数。任何普通的参数必须在它之前声明
public class Demo01 { public static void main(String[] args) { Demo01 demo01=new Demo01();//创建Demo01类的一个对象demo01 int sum=demo01.add(1,1,2,3,5,8,13);//调用demo01对象的add方法并将返回值赋值给sum变量 System.out.println("sum="+sum);//sum=33 } public int add(int...i){ int sum=0; for (int j = 0; j < i.length; j++) {//遍历i数组,通过j下标引用 sum+=i[j]; } return sum; } }
递归讲解(栈机制)
- 嵌套:A方法调用B方法
- 递归:A方法调用A方法
- 递归结构:
- 递归头:什么时候不调用自身方法。如果没有头,将陷入死循环(栈溢出)
- 递归体:什么时候需要调用自身方法
public class Demo01 {
public static void main(String[] args) {
int sum=f(7);
System.out.println("sum="+sum);//sum=5040
}
public static int f(int n){
if(n>1) {
return n*f(n-1);//前阶段+返回阶段
}else{
return 1;//边界条件
}
}
}