模块课程(2/2)
方法和重载
方法定义对象的行为。我们可以将它们视为在类内部声明的函数,这些函数对对象的实例字段或传入参数进行操作。
定义方法
Java 中的方法由以下部分组成:
- 访问修饰符(例如,
public、private)。 - 返回类型(例如,
int、String或void(如果不返回任何内容)。 camelCase中的方法名称。- 参数 括在括号内。
- 方法体 用大括号括起来。
class Person {
String name;
public Person(String name) {
this.name = name;
}
// Method with return type String
public String greet() {
return "Ciao, mi chiamo " + name;
}
}调用方法
要在创建的对象上调用方法,我们使用点符号 .:
public class Main {
public static void main(String[] args) {
Person p = new Person("Marco");
String message = p.greet(); // Calling the method
System.out.println(message);
}
}方法重载
在Java中,同一类中的两个或多个方法可以具有相同的名称,只要它们具有不同的参数列表(参数的数量、顺序或类型)。这个概念称为重载。
编译器通过分析调用期间传递的参数来决定调用哪个方法。
class Printer {
// Method to print an integer
public void printValue(int number) {
System.out.println("Intero: " + number);
}
// Overloaded method to print a string
public void printValue(String text) {
System.out.println("Testo: " + text);
}
}按值传递参数
在Java中,所有参数都是按值(pass-by-value)传递。这意味着当您将参数传递给方法时,Java 会创建变量值的副本并将其传递给方法。
- 对于原始类型,方法外部的原始值永远不会改变,即使在方法内部进行了修改。
- 对于对象/引用,复制对对象的引用。这意味着,虽然我们无法更改原始对象指向的内存地址,但我们可以修改其内部状态(例如,其字段),并且这些更改将在外部可见。
重载限制:返回类型
需要注意的是,您不能仅根据返回类型来重载方法。例如,以下代码将导致编译错误:
class Example {
// ERROR: The signature of the two methods is considered identical
public int getNumber() { return 42; }
public double getNumber() { return 42.0; }
}编译器只需要根据参数来区分方法,以决定在编译时调用哪个版本(重载在编译时解决)。
自己尝试一下
将 public int add(int a, int b) 方法添加到 Calculator 类,该方法返回两个数字的总和。在 main 方法中,对 calc 对象调用此方法并将结果分配给整数变量。
显示提示
将该方法声明为 `public int add(int a, int b) { return a + b; }` 并在 main 方法中调用它作为 `int result = calc.add(5, 10);`。
3 次尝试后可用的解决方案
通过创建另一个接受两个双精度参数并返回它们之和的方法来重载 Calculator 类中的 add 方法。
显示提示
写成 `public double add(double a, double b) { return a + b; }` 直接位于第一个 add 方法下方。
3 次尝试后可用的解决方案
向 Calculator 类添加一个 public int multiply(int a, int b) 方法,该方法返回两个数字的乘积。在 main 方法中,对 calc 对象调用此方法并将结果分配给整数变量。
显示提示
将该方法声明为 `public int multiply(int a, int b) { return a * b; }` 并在 main 方法中调用它作为 `int result = calc.multiply(5, 10);`。
3 次尝试后可用的解决方案