方法(函数)
Java中的方法必须定义在类或接口中。
package day2;
import java.util.Scanner;
public class way {
public static void main(String[] args) {
int arr[] = new int[5];
Scanner sc = new Scanner(System.in);
for (int i = 0; i < arr.length; i++) arr[i] = sc.nextInt();
test(arr);
System.out.println(arr[0]);
}
//定义一个方法
public static void test(int arr[]) {
for (int i : arr) {
System.out.print(i + " ");
}
//可以直接改变main函数当中的值
arr[0] = 10;
System.out.println();
}
}
在 Java 中,当你将变量传递给方法时,传递方式取决于变量的数据类型:基本数据类型(如 int
, double
, boolean
等)是通过值传递的,而对象引用(如数组、对象等)是通过引用传递的,也就是可以在方法当中改变对象的值的。
方法重载的基本概念
定义
方法重载指在同一个类中,方法名相同但参数列表(参数类型、个数或顺序)不同的多个方法。返回类型可以相同也可以不同,但仅凭返回类型的不同,不能实现方法重载。
规则
- 方法名相同:所有重载的方法必须具有相同的方法名。
- 参数列表不同:重载的方法必须在参数列表上有区别,可以通过以下方式实现:
- 参数的类型不同
- 参数的个数不同
- 参数的顺序不同
- 返回类型可以相同也可以不同:返回类型不是方法重载的依据,不能仅通过返回类型的不同来实现方法重载。
- 访问修饰符和异常声明可以不同:方法的访问修饰符(如
public
、private
)和抛出的异常类型可以不同,但这不会影响方法重载。
方法重载的示例
以下是一个简单的示例,展示如何在Java中实现方法重载:
public class Calculator {
// 加法方法,两个整数
public int add(int a, int b) {
return a + b;
}
// 加法方法,三个整数
public int add(int a, int b, int c) {
return a + b + c;
}
// 加法方法,两个双精度数
public double add(double a, double b) {
return a + b;
}
// 加法方法,两个整数和一个双精度数
public double add(int a, int b, double c) {
return a + b + c;
}
}
在上述示例中,Calculator
类中定义了多个名为 add
的方法,它们通过不同的参数列表来实现重载:
add(int a, int b)
:接受两个整数参数。add(int a, int b, int c)
:接受三个整数参数。add(double a, double b)
:接受两个双精度数参数。add(int a, int b, double c)
:接受两个整数和一个双精度数参数。
根据传入参数的不同,Java编译器会自动选择最匹配的方法进行调用。
public class Main {
public static void main(String[] args) {
Calculator calc = new Calculator();
int sum1 = calc.add(2, 3); // 调用 add(int, int)
int sum2 = calc.add(1, 2, 3); // 调用 add(int, int, int)
double sum3 = calc.add(2.5, 3.5); // 调用 add(double, double)
double sum4 = calc.add(1, 2, 3.5); // 调用 add(int, int, double)
System.out.println("sum1: " + sum1); // 输出: sum1: 5
System.out.println("sum2: " + sum2); // 输出: sum2: 6
System.out.println("sum3: " + sum3); // 输出: sum3: 6.0
System.out.println("sum4: " + sum4); // 输出: sum4: 6.5
}
}
注意事项
-
避免模糊调用:在方法重载时,参数类型和顺序的变化可能导致调用时的歧义,尤其是在自动类型转换的情况下。例如:
public void display(int a, double b) { ... } public void display(double a, int b) { ... } // 调用 display(1, 2); // 编译器无法确定调用哪个方法,可能导致编译错误
-
返回类型不参与重载:仅通过改变返回类型而不改变参数列表,无法实现方法重载。例如:
public int compute(int a) { ... } public double compute(int a) { ... } // 编译错误