什么是方法
方法就是 我们做一件事情的时候需要一个方法,比如说我们需要一份蛋炒饭,我们用什么方法可以得到一份蛋炒饭呢,我们可以用买的方法,也可以用自己做的方法,这些都是方法,就是我们提供或者不提供一个东西都行,通过一个方法去做到。这是日常生活中的方法,java中的方法也是这样,我们想要去实现一个功能,比如说我们想要实现两个数相加,那么我们就应该去用两个数相加这个方法,我们去用这个方法的时候,就叫调用这个方法。
方法的定义
按照上边说的,方法就是用来帮我们实现一个功能的,所以方法的定义就是一个可以完成特定功能的代码块。
语法:(方括号里边的内容不是必须存在的)
[修饰符] 返回值类型 方法名(参数列表){实现方法的具体代码;[return 返回值;]}
比如说熟悉了的主方法的定义
public static void main(String[] args){
//方法体
}
//举例
//定义一个返回值为int类型的方法,方法名为getSum,方法体实现传递过来的两数之和
static int getSum(int a, int b) {
int c = a + b;
return c; //返回 a + b之和
}
其中public和static是修饰符;
void是返回值类型;
main是方法名;
String[] args是参数列表;
修饰符: 就目前来说我们应该用到的都是static
返回值类型: void是这个方法没有返回值的时候使用,其他的时候,返回什么类型的值就写什么类型。
注意:
- 方法和方法之间都是平行的,不分前后。
- 方法里边不能定义方法。
- 方法必须定义在类中。
方法的调用
语法格式:
返回值类型 变量 = 方法所在类名.方法名(实际参数);
//调用getSum方法
public static void main(String[] args){
//调用
//返回值为int ,所以要用int 的数据类型的变量来接收
int sum = getSum(2,3);//如果调用的方法与调用者在同一个类里边,那么就可以省略类名。
//2和3为实参,也就是实际的参数,是要传递给调用方法中参数列表的形参。
}
练习:
第一题MethodDemo1.java(重点)
需求:定义求两个整数之和的方法
步骤:
(1)定义方法
确定方法名,修饰符(暂时使用static)
确定是否需要形式参数
确定是否需要返回
(2)调用方法
确定调用语法(暂时类名调用方法)
确定需要传入什么实际参数
确定是否需要定义变量接收返回值
public class MethodDemo1{
/**
定义方法:修饰符 返回值类型 方法名(参数列表){方法体[返回值;]}
确定方法名,修饰符(暂时使用static)
确定是否需要形式参数:因为是计算两个数的和,所以肯定是需要两个数
确定是否需要返回:要求两个整数之和,所以要的是结果和,是需要返回数据的,而且是int型的数据
*/
static int getSum(int a,int b){
int c = a + b;//计算和
return c;// 返回计算出来的和
}
/**
调用方法
确定调用语法:数据类型 变量名 = 类名.方法名(参数,参数...)
如果在同一个类里边,类名可以不写 可以直接 = 方法名(参数,参数...)
确定需要传入什么实际参数:因为是计算两个整数的和,所以肯定要给这个方法两个整数
确定是否需要定义变量接收返回值:考虑我们调用的方法有没有返回值,如果有的话就定义一个和返回值类型相同的数据,如果没有的话就不用定义
*/
//main是主方法
//我想在同一个类里的主方法里边调用getSum
public static void main(String[] args){
//调用方法
int sum = getSum(2,3);
//输出结果
System.out.print(sum);
}
}
可变参数
- 可变参数的底层就是一个一维数组,只是一种简化的语法
- 在需要一个一维数组且数组元素的数量不确定的时候使用
- 可变参数必须在参数的最后一个,为了避免参数的歧义性,所以一个方法只能有一个可变参数
方法的重载
方法的重载意思就是在定义方法的时候,可以存在方法名相同但是参数列表不同的情况
就相当于 方法名和参数列表在一起才是方法的主键,才能区分出来不同的方法
参数列表:
参数的类型、参数的个数、参数顺序
方法重载判断原则:“两同一不同”
- 两同:在同一个类中,方法名是相同的
- 一不同:方法参数列表不同(参数类型、参数个数、参数顺序)
- 只要参数类型、参数个数、参数顺序任意一个不同,就叫参数列表不同
方法重载的作用:屏蔽了同一功能的方法由于参数不同所造成方法名称不同。
注意:方法重载和方法的返回值类型无关,只是一般要求返回值类型相同。
方法参数的值传递机制
基本类型参数
传递的是参数值,就是相当于把值复制了一份过去
static void change(int x) {
System.out.println("change before,x=" + x);//10
x = 100;// 修改x变量的值
System.out.println("change after,x=" + x);//100
}
public static void main(String[] args) {
int a = 10;
System.out.println("main before,a=" + a);//10
change(a);
System.out.println("main after,a=" + a);//100? 10?
}
得到的结果
main before,a=10
change before,x=10
change after,x=100
main after,a=10
引用类型参数
传递的是参数的地址
static void change(int[] arr) {
System.out.println("change before,arr[0]=" + arr[0]);//10
arr[0] = 30;//修改数组中第一个元素的值
System.out.println("change after,x[0]=" + arr[0]);//30
}
public static void main(String[] args) {
int[] a = new int[] { 10, 90 };
System.out.println("main before,a[0]=" + a[0]);//10
change(a);
System.out.println("main after,a[0]=" + a[0]);//30
}
得到的结果
x main before,a[0]=10
change before,arr[0]=10
change after,x[0]=30
main after,a[0]=30