day_06:方法
一、什么是方法?
- 方法(method)是程序中最小的执行单元。
- 重复的代码、具有独立功能的代码可以抽取到方法中。
二、方法的定义与调用
定义:把一些代码打包在一起,该过程称为方法定义。
调用:方法定义后并不是直接运行的,需要手动调用才能执行,该过程称为方法调用。
1. 最简单的方法定义与调用
定义:
java
public static void 方法名() {
方法体(就是打包起来的代码);
}调用:
java
方法名();注意
方法必须先定义后调用,否则程序将报错。
2. 带参数的方法定义与调用
定义:
java
public static void 方法名(参数1,参数2, ......) {
方法体(就是打包起来的代码);
}调用:
java
方法名(参数1,参数2, ......);形参与实参:
- 形参:全称形式参数,是指方法定义中的参数。
- 实参:全称实际参数,方法调用中的参数。
注意
方法调用时,形参和实参必须一一对应,否则程序将报错。
3. 带返回值的方法定义与调用
定义:
java
public static 返回值类型 方法名(参数) {
方法体;
return 返回值;
}调用:
直接调用:
java方法名(实参);赋值调用:
java整数类型 变量名=方法名(实参);输出调用:
javaSystem.out.println(方法名(实参));
返回值:
方法的返回值其实就是方法运行的最终结果。
注意事项
- 方法不调用就不执行;
- 方法与方法之间是平级关系,不能互相嵌套定义;
- 方法的编写顺序和执行顺序无关;
- 方法的返回值类型为
void,表示该方法没有返回值,没有返回值的方法可以省略return语句不写,如果要编写return,后面不能跟具体的数据; return语句下面,不能编写代码,因为永远执行不到,属于无效的代码。
三、方法的重载
1. 重载:
在同一个类中,定义了多个同名的方法,这些同名的方法具有同种的功能,每个方法具有不同的参数类型或参数个数,这些同名的方法,就构成了重载关系,与返回值无关。
顺序不同可以构成重载,但是不建议!
2. return break关键字的区别:
return:其实跟循环没有什么关系,跟方法有关的,表示1结束方法2返回结果如果方法执行到了return,那么整个方法全部结束,里面的循环也会随之结束了;- break:其实跟方法没有什么关系,结束循环或者
switch的。
四、方法的内存
1. 方法调用的基本内存原理
先进后出
2. 方法传递的内存原理
基本数据类型:
- 数据值是存储在自己的空间中;
- 赋值给其他变量,也是赋的真实的值。
引用数据类型:
- 数据值是存储在其他空间中,自己空间中存储的是地址值;
- 赋值给其他变量,赋的地址值。
3. 方法的值传递
传递基本数据类型时,传递的是真实的数据,形参的改变,不影响实际参数的值;
传递引用数据类型时,传递的是地址值,形参的改变,影响实际参数的值。
附:练习题
键盘录入一个正整数,定义一个方法,该方法的功能是计算该数字是几位数字,并将位数返回,在
main方法中打印该数字是几位数。javastatic void main(String[] args) { //创建键盘录入对象 Scanner sc = new Scanner(System.in); //键盘录入一个整数 System.out.println("请输入一个整数:"); int num = sc.nextInt(); //输出结果 System.out.println(getNumberDigits(num)); } //定义方法 public static int getNumberDigits(int num) { //定义变量记录位数 int count = 0; //while循环除10,直到为零 while (num != 0) { //num除10并再赋值给num num /= 10; //位数自增 count++; } //返回数字位数 return count; }一个大V直播抽奖,奖品是现金红包,分别有{2,588,888,1000,10000}五个奖金,请使用代码模拟抽奖,打印出每个奖项,奖项的出现顺序要随机且不重复。
javastatic void main(String[] args) { //定义奖金数组 int[] arrBonus = {2, 588, 888, 1000, 10000}; //定义以抽奖金数组 int[] arrBonusExist = new int[arrBonus.length]; //遍历数组 for (int i = 0; i < arrBonusExist.length; i++) { //调用方法获取随机索引 int randomIndex = getRandomIndex(arrBonus, arrBonusExist); //打印抽奖结果 System.out.println(arrBonus[randomIndex] + "元的奖金被抽出"); //将以抽取的奖金放入以抽取数组中 arrBonusExist[i] = arrBonus[randomIndex]; } } //定义方法判断某数组中是否存在某数 public static boolean getNumExist(int[] arr, int num) { for (int i = 0; i < arr.length; i++) { if (arr[i] == num) { return true; } } return false; } //定义方法生成随机索引并判断是否被抽取 public static int getRandomIndex(int[] arrBonus, int[] arrBonusExist) { //创建随机数对象 Random r = new Random(); //生成随机索引 int randomIndex = r.nextInt(0, arrBonus.length); //调用方法判断是否已被抽取 boolean result = getNumExist(arrBonusExist, arrBonus[randomIndex]); //若被抽取则再次随机生成索引,直至未抽取 while (result) { //生成随机索引 randomIndex = r.nextInt(0, arrBonus.length); //判断是否已被抽取 result = getNumExist(arrBonusExist, arrBonus[randomIndex]); } //返回随机索引 return randomIndex; }