方法
一、方法概述
方法
:一段具有独立功能的代码块,不调用就不执行
方法的好处:可以提高代码的复用性
方法使用须知:
- 方法必须先创建才可以使用(方法定义)
- 方法创建后并不是直接运行的,需要手动调用(方法调用)
二、方法的定义和调用
格式:
public static void 方法名(){
方法体;
}
如果调用了一个没有定义的方法,程序会报错
方法的调用过程:
- 方法没有被调用存在于
方法区
- 方法被调用时加载到
栈内存
(栈内存:栈内存特点是先进后出,后进先出(子弹匣子))
public static void main(String[] args){
//方法调用
method();
}
//方法定义
public static void method(){
System.out.println("方法");
}
三、带参数方法的定义和调用
public static void 方法名(数据类型 变量名){
方法体;
}
注意事项:
- 参数中的数据类型与变量名都不能缺少,否则程序报错
- 多个参数之间使用逗号分隔
- 调用带参数的方法时,参数的数量、类型必须与方法定义中设置的匹配,否则程序报错
形参和实参:
形参
:形式参数,是指方法定义时的参数;作用是接收实参实参
:实际参数,是指方法调用时的参数;也就是实际参与运算的数据,由调用者指定
四、带返回值方法的定义和调用
格式:
public static 返回值类型 方法名(数据类型 变量名){
方法体;
return 数据;
}
为什么要有带返回值的方法?
我们经常会根据一个方法产出的结果,去组织另一段代码逻辑,为了拿到这个方法产生的结果,就需要定义带返回值的方法
return
关键字的作用:返回返回值(并且停止方法)
注意事项:
return
后面的返回值,与方法定义上的数据类型要匹配,否则报错- 方法的返回值通常会使用变量接收,否则该返回值将无意义
方法的通用定义格式:
public static 返回值类型 方法名(参数列表){
方法体;
return 数据;
}
方法定义时的两个明确:
- 返回值类型:该方法需不需要返回一个结果? 它是什么类型的? 如果不需要返回一个结果,在返回值类型处写
void
- 参数列表:该方法执行过程中,需不需要原材料(实际参与运算的数据),如果需要,写在参数列表中,由
数据和变量名
组成;有多个参数,使用逗号分隔;如果不需要则不写
方法调用的三种方式:
- 直接调用:用于调用
没有返回值
的方法(如果调用有返回值的方法,那么将无意义) - 赋值调用:必须调用
有返回值
的方法(将返回值使用相同类型变量接收,用于后续操作) - 打印调用:必须调用
有返回值
的方法(在输出语句中调用方法,相当于直接打印了返回值)
public static void main(String[] args){
//直接调用
method1();
//赋值调用
int c = method2(1,2);
//打印调用
System.out.println(method2());
}
public static void method1(){
System.out.println("学习");
}
public static int method2(int a,int b){
return a + b;
}
五、方法的注意事项
方法定义时:
- 参数中的数据类型与变量名都不能缺少,否则程序报错
- 多个参数之间使用逗号分隔
- 方法不能
嵌套定义
return
后面的返回值与方法定义上的数据类型要匹配,否则报错- 方法的返回值为
void
,表示该方法没有返回值,可以省略return
不写 return
的作用是返回返回值,并且停止方法;所以return
语句下面不能编写代码,属于无效语句会报错
方法调用时:
- 调用带参数的方法时,参数的数量、类型必须与方法定义中设置的匹配,否则程序报错
- 如果调用了一个有返回值的方法,需要用相同类型变量接收,否则返回值将无意义
六、方法的重载
在同一个类中,出现了方名相同,参数列表不同(数量、类型、顺序)的方法,我们称这些方法构成了重载;方法的重载与返回值无关
方法重载的好处:不用记忆过多繁琐的方法名
//两个add方法构成方法的重载
public class Demo{
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 class Demo{
public static void main(String[] args){
int num = 10;
System.out.println(num);//10
method(num);
System.out.println(num);//10
int[] arr = {10,20};
System.out.println(arr[1]);//20
method1(arr);
System.out.println(arr[1]);//200
}
public static void method(int num){
num = 20;
}
public static void method1(int[] arr){
arr[1] = 200;
}
}