目录
2.1、方法的作用
2.2、main和其他方法的关系
2.4、方法的返回值类型如何决定?
2.5、方法应该有什么形式参数如何决定? 未知因素
2.6、调用方法的语法,为什么这里可以使用类去调用方法?
2.7、实际参数和形式参数的关系
2.8、如何理解可变参数
2.9、方法重载的判断依据
2.10、基本类型和引用类型的参数传递的区别
2.11 .方法的思维导图
2.1、方法的作用
在其他地方如果会用到相同的功能,我们可以将这个功能抽取成一个方法,在相同功能的地方,我们就可以通过调用该方法的方式,替换掉这些代码,从而解决代码重复,代码冗余的情况
就比如两个数求和这个功能,在本类中跟多地方需要用到,或者其他类可能需要用到,就可以将该功能抽取成一个方法,用到该功能时,就直接调用即可。
2.2、main和其他方法的关系
并列关系,所以不能将方法定义在主方法main的内部
2.3、定义方法的语法
// 修饰符 : public static等,static表示该方法是静态的,能够直接被类名调用,如果没有static修饰符修饰的
// 方法,在其他类中调用该方法时,就需要创建该方法所在类的对象,通过这个对象才能调用该方法
// 返回值类型 :基本类型、引用类型、void
// 方法名 :跟标识符一样的命名规则,采用小驼峰命名法来命名
// 这里的参数,是形参
修饰符 返回值类型 方法名 (参数类型 参数1 , 参数类型 参数2 ,….){
// 如果返回值类型是void 就不需要return
[return 返回值;]
}
2.4、方法的返回值类型如何决定?
看方法的调用者需要什么类型的数据
比如,一个人(方法的调用者)去水果店(方法)买水果,这个人给了钱(参数),而这个人需要获得的是苹果,或者香蕉(返回值),而苹果、香蕉的类型就是水果类型
2.5、方法应该有什么形式参数如何决定? 未知因素
定义方法时,不知道参数具体的值,需要从外界给出,这样的参数,就是方法所需要的形参
2.6、调用方法的语法,为什么这里可以使用类去调用方法?
因为在方法定义的时候,方法的修饰符是static,而有了static修改该方法,该方法就可以通过类直接调用该方法。
2.7、实际参数和形式参数的关系
- 实际参数:是我们实际知到且,知道这个参数的值
- 形式参数:不知道具体的值,只知道参数的类型,明确规定,调用该方法时,需要什么样的参数
- 两者之间的关系:在调用方法时,实际参数的传递,需要根据形式参数的类型、个数、顺序决定
2.8、如何理解可变参数
如果形式参数中有数组的时候,我们传递实参时,通常都会先定义一个数组的变量,然后将变量传给方法,这样多多少少会有点麻烦,所以,我们可以使用可变参数来传递数组类型的参数。
语法是:
修饰符 返回值类型 方法名(参数类型 参数1,参数类型... 参数){
方法体;
}
2.9、方法重载的判断依据
方法名相同,但参数类型、个数、顺序不一样
例如:
1、参数个数不一样,但参数名是一样的
// 两个数相加
public void getSum(int a , int b){}
// 三个数相加
public void getSum(int a , int b , int c){}
2、参数个数相同,参数名相同,但参数类型不一样
blic void hava(int a, int b){}
public void hava(int a , boolean b){}
3、参数个数、参数类型和参数名都相同,但是参数的顺序不一样
public void hava(int a , boolean b){}
public void hava(boolean b , int a){}
4、以下是反例:
public void hava(int a, boolean b){}
与上述方法相比
public void hava(int x , boolean y){} // 只是参数的名字不一样,其他都一样,这不算方法的重载
public String hava(int a , boolean b){} // 只是方法的返回值类型不一样,这不是方法的重载
2.10、基本类型和引用类型的参数传递的区别
- 基本类型
以下面代码为例:
public class test {
public static void main(String[] args) {
int num = 1;
test(num);
System.out.println(num); // num = 1
}
// 基本类型
public static void test(int num){
System.out.println(num); // num = 1
num = 2;
System.out.println(num);// num = 2
}
}
在方法中num的赋值跟main主方法中定义的num不一样,main中的num,是成员变量,而方法中的num是局部变量
main方法中的num作为参数传递给成员方法,其实,也仅仅只是将num中的值传递过去了而已,并不是把这个变量本身传递过去了
- 引用类型
以下面代码为例:
public class test {
public static void main(String[] args) {
int[] nums = {1,2,3};
test(nums);
System.out.println(nums[0]);// nums[0] = 2
}
// 基本类型
public static void test(int[] nums){
System.out.println(nums[0]); // nums[0] = 1
nums[0] = 2;
System.out.println(nums[0]);// nums[0] = 2
}
}
main中的数组nums,作为参数传递给了自定义的方法,而传过去的值是数组在堆内存中的地址值,不是数组中的值,所以当成员方法中,对数组中的值重新赋值,也就是将堆内存中的数组中的值做了改变,所以在main方法中再次打印出来的值,就是在方法中改变了的值
2.11 .方法的思维导图