1、方法重载
1.1、 方法重载(理解)
方法重载概念:
方法重载指在同一个类中,有多个方法名相同,但是参数列表(参数列表包括:个数、类型、顺序)不同
注意:
重载仅对应方法的定义,与方法的调用无关,调用方式参照标准格式 重载仅针对同一个类中方法的名称 与参数进行识别,与返回值无关,换句话说不能通过返回值来判定两 个方法是否相互构成重载
正确范例:
public class MethodDemo {
public static void fn(int a) {
//方法体
}
public static int fn(double a) {
//方法体
}
}
public class MethodDemo {
public static float fn(int a) {
//方法体
}
public static int fn(int a , int b) {
//方法体
}
}
错误范例:
public class MethodDemo {
public static void fn(int a) {
//方法体
}
public static int fn(int a) { /*错误原因:重载与返回值无关*/
//方法体
}
}
public class MethodDemo01 {
public static void fn(int a) {
//方法体
}
}
public class MethodDemo02 {
public static int fn(double a) { /*错误原因:这是两个类的两个 fn 方法*/
//方法体
}
}
1.2、方法重载练习(掌握)
需求:使用方法重载的思想,设计比较两个整数是否相同的方法,兼容全整数类型(byte,short,int,long)
思路:
①定义比较两个数字的是否相同的方法 compare()方法,参数选择两个 int 型参数
②定义对应的重载方法,变更对应的参数类型,参数变更为两个 long 型参数
③定义所有的重载方法,两个 byte 类型与两个 short 类型参数
④完成方法的调用,测试运行结果
代码:
public class MethodTest {
public static void main(String[] args) {
//调用方法
System.out.println(compare(10, 20));
System.out.println(compare((byte) 10, (byte) 20));
System.out.println(compare((short) 10, (short) 20));
System.out.println(compare(10L, 20L));
}
//int
public static boolean compare(int a, int b) {
System.out.println("int");
return a == b;
}
//byte
public static boolean compare(byte a, byte b) {
System.out.println("byte");
return a == b;
}
//short
public static boolean compare(short a, short b) {
System.out.println("short");
return a == b;
}
//long
public static boolean compare(long a, long b) {
System.out.println("long");
return a == b;
}
}
2、 方法的参数传递
2.1、方法参数传递基本类型(理解)
测试代码:
public class ArgsDemo01 {
public static void main(String[] args) {
int number = 100;
System.out.println("调用 change 方法前:" + number);
change(number); System.out.println("调用 change 方法后:" + number);
}
public static void change(int number) {
number = 200;
}
}
结论:
基本数据类型的参数,形式参数的改变,不影响实际参数
结论依据:
每个方法在栈内存中,都会有独立的栈空间,方法运行结束后就会弹栈消失
2.2、方法参数传递引用类型(理解)
测试代码:
public class ArgsDemo02 {
public static void main(String[] args) {
int[] arr = {10, 20, 30};
System.out.println("调用 change 方法前:" + arr[1]);
change(arr); System.out.println("调用 change 方法 后:" + arr[1]);
}
public static void change(int[] arr) {
arr[1] = 200;
}
}
结论: 对于引用类型的参数,形式参数的改变,影响实际参数的值
结论依据:
引用数据类型的传参,传入的是地址值,内存中会造成两个引用指向同一个内存的效果,所以即使方法 弹栈, 堆内存中的数据也已经是改变后的结果
2.3、 数组遍历(应用)
需求:设计一个方法用于数组遍历,要求遍历的结果是在一行上的。例如:[11, 22, 33, 44, 55]
思路:
①因为要求结果在一行上输出,所以这里需要在学习一个新的输出语句
System.out.print(“内容”);
System.out.println(“内容”); 输出内容并换行
System.out.print(“内容”); 输出内容不换行
System.out.println(); 起到换行的作用
②定义一个数组,用静态初始化完成数组元素初始化
③定义一个方法,用数组遍历通用格式对数组进行遍历
④用新的输出语句修改遍历操作
⑤调用遍历方法
代码:
public class MethodTest01 {
public static void main(String[] args) {
//定义一个数组,用静态初始化完成数组元素初始化
int[] arr = {11, 22, 33, 44, 55};
//调用方法
printArray(arr);
}
//定义一个方法,用数组遍历通用格式对数组进行遍历
/*
两个明确:
返回值类型:void
参数:int[] arr
*/
public static void printArray(int[] arr) {
System.out.print("[");
for(int x=0; x<arr.length; x++) {
if(x == arr.length-1) {
System.out.print(arr[x]);
} else {
System.out.print(arr[x]+", ");
}
}
}
}
2.4、数组最大值(应用)
需求:设计一个方法用于获取数组中元素的最大值
思路:
①定义一个数组,用静态初始化完成数组元素初始化
②定义一个方法,用来获取数组中的最大值,最值的认知和讲解我们在数组中已经讲解过了
③调用获取最大值方法,用变量接收返回结果
④把结果输出在控制台
代码:
public class MethodTest02 {
public static void main(String[] args) {
//定义一个数组,用静态初始化完成数组元素初始化
int[] arr = {12, 45, 98, 73, 60};
//调用获取最大值方法,用变量接收返回结果
int number = getMax(arr);
//把结果输出在控制台
System.out.println("number:" + number);
}
//定义一个方法,用来获取数组中的最大值
/*
两个明确:
返回值类型:int
参数:int[] arr
*/
public static int getMax(int[] arr) {
int max = arr[0];
for(int x=1; x<arr.length; x++) {
if(arr[x] > max) {
max = arr[x];
}
}
return max;
}
}