49. Java 类和对象 - 调用方法和构造函数
在 Java 中,**方法(Method)和构造函数(Constructor)**都可以接收参数,用来在调用时传递信息或初始值。了解参数和实参(即方法或构造函数调用时传入的值)之间的区别,以及如何正确传递这些值,对于编写和使用方法、构造函数十分重要。
1. 将信息传递给方法
1.1 方法的参数声明
一个方法声明时,参数列表位于方法名后的括号 ()
中,每个参数声明由类型 和参数名组成,多个参数之间用逗号分隔。例如:
java
public double computePayment(double loanAmt,
double rate,
double futureValue,
int numPeriods) {
// 方法体:使用传入的参数来执行运算或逻辑
}
double loanAmt
:表示贷款金额double rate
:表示利率(百分比数值)double futureValue
:表示将来价值int numPeriods
:表示还款期数
在方法体中,这些参数名就像局部变量一样使用,用于参与计算或逻辑。
1.2 调用方法时传入实参
当我们调用方法时,需要按顺序给出与方法声明匹配的实参(Arguments),数量和类型都必须与参数列表对应。例如:
java
// 调用 computePayment 方法,传入四个实参
double monthlyPayment = computePayment(200000, 3.5, 0, 360);
System.out.println("Monthly Payment: " + monthlyPayment);
200000
-> 对应参数loanAmt
3.5
-> 对应参数rate
0
-> 对应参数futureValue
360
-> 对应参数numPeriods
在方法调用时,实参的类型和顺序必须与方法声明中的参数一一对应。参数列表(Parameters)指的是方法声明时的形式参数,而**实参(Arguments)**指的是调用方法时传入的实际数值。
2. 将信息传递给构造函数
2.1 构造函数的参数声明
构造函数的声明与方法类似,只是名称必须与类名相同,而且没有返回类型。构造函数也可以接收参数,用来初始化对象的字段。例如:
java
public class LoanCalculator {
private double principal;
private double annualRate;
private int periods;
// 带参数的构造函数
public LoanCalculator(double principal, double annualRate, int periods) {
this.principal = principal;
this.annualRate = annualRate;
this.periods = periods;
}
// 其他方法...
}
2.2 调用构造函数时传入实参
通过 new
关键字调用构造函数时,也需要向其传入与参数列表匹配的实参。例如:
java
// 调用 LoanCalculator 构造函数,传入三个实参
LoanCalculator calc = new LoanCalculator(200000, 3.5, 360);
这会创建一个 LoanCalculator
对象,并使用传入的实参初始化相应字段。
3. 参数与实参的匹配规则
- 数量必须相同 调用方法或构造函数时,实参的数目必须与声明中的参数数目一致。
- 类型必须兼容 实参的类型必须与声明中的参数类型相匹配或可兼容(例如
int
类型可以传给形参类型为double
,会进行自动类型转换)。 - 顺序必须保持 参数列表中的顺序决定了实参的意义和类型,也要严格遵守。
如果在调用时不满足这些要求,编译器会报错,无法编译通过。
4. 返回值(对于方法)
- 方法可能有返回值 :方法可以声明一个非
void
的返回类型,并在方法体内使用return
关键字返回一个结果。例如前面例子中的computePayment
方法返回一个double
。 - 构造函数没有返回值:构造函数不需要,也不能声明返回类型,因为它的作用是创建并初始化对象,而不是返回一个额外的值。
5. 小结
- 方法声明中指定参数类型和参数名,调用方法时需要按正确的类型、数量和顺序传递实参。
- 构造函数 与方法类似,也可以指定参数列表;调用构造函数时使用
new
,并按匹配的实参进行初始化。 - 参数列表 中的变量称为"形式参数(
Parameters
)",调用时传入的实际数值 称为"实参(Arguments
)"。 - 返回类型适用于方法,如果方法声明了非
void
类型,就必须在方法体内使用return
。构造函数则没有返回类型,且名称必须与类名相同。
在实际开发中,正确理解和使用参数列表与实参传递,可以帮助你组织和调用方法或构造函数,构建更模块化、更易维护的程序。