请查看以下课程:
public class Loan {
private double annualInterestRate;
private int numberOfYears;
private double loanAmount;
private java.util.Date loanDate;
// Default constructor
public Loan() {
this(2.5, 1, 1000);
}
}
对于代码行this(2.5, 1, 1000);
,我在Eclipse中收到以下错误消息:“构造函数Loan(double,int,int)未定义”。添加带有参数的新构造函数时,此错误消失:
// Construct a loan with specified annual interest rate, number of years and loan amount
public Loan(double annualInterestRate, int numberOfYears, int loanAmount) {
this.annualInterestRate = annualInterestRate;
this.numberOfYears = numberOfYears;
this.loanAmount = loanAmount;
loanDate = new java.util.Date();
}
为什么使用参数创建构造函数会从默认构造函数中删除“undefined”错误?这两种不同的构造函数如何相互关联?
我如何知道this(2.5, 1, 1000)
中的值是否已分配给正确的数据字段?我假设应该将{2.5分配给annualInterestRate
,将1分配给numberOfYears
,将1000分配给loanAmount
。
答案 0 :(得分:3)
在你的无参数构造函数中,行
GetSystemMetrics()
显式意味着“调用与当前构造函数相同的类的另一个构造函数,但它接受这些参数”。
这就是为什么添加其他构造函数可以解决问题。传递参数的顺序需要与参数在该构造函数上出现的顺序相匹配,构造函数的参数列表定义了调用参数时所需的顺序。
这两个构造函数之间的关系是它们被链接。具有3个参数的那个是主构造函数,另一个使用默认值调用主构造函数。以这种方式设计构造函数有助于始终如一地初始化对象,因为始终会调用单个主构造函数。 (例如,无论您调用哪个构造函数,loanDate实例字段都会被设置。)
答案 1 :(得分:2)
您收到了错误
"构造函数Loan(double,int,int)未定义"
因为如果你看看:
this(2.5, 1, 1000);
您可以看到参数如下2.5
double
,1
是int
和1000
,它也是{ {1}},因此它使用这些参数调用构造函数,并且没有定义此类构造函数。
使用这个关键字,我们将称为当前类的构造函数,因此我们期待一个带有这些参数的构造函数,这就是为什么你需要实现这个构造函数:
int
正如David在评论中所述,错误消失了,因为您定义了所声明的构造函数。
答案 2 :(得分:1)
为了回答您的问题,第一件事是Java是一种强类型语言。参考Wiki
现在来到您的查询,当您正确this(2.5, 1, 100)
时,它会尝试找出this()
引用的构造函数,其参数类型为 double,int,int (这是在序列中使用隐式类型转换在Java中实现的。由于参数序列与类型匹配很重要,因此可以确保将正确的值赋给right参数。我希望它能回答你的疑问。