[英]What is the problem with parameters in the constructor of a Class in Java?
在这段代码中,如果我在参数化构造函数中保留int i
,则会抛出错误。 如果int i
以外的任何其他工作正常。
示例: int j
工作正常。 这个错误的原因是什么,请指教我的知识。
//this program throws an error
class X
{
final int i;
X()
{
i = 0;
}
X(int i)//need to keep other than i
{
i = 20;
}
}
//this program works fine
class X
{
final int i;
X()
{
i = 0;
}
X(int j)
{
i = 20;
}
}
在
X(int i)
{
i = 20;
}
局部变量i
(构造函数的参数)隐藏了实例变量i
。 因此i = 20;
修改局部变量,而不是同名的final
实例变量,该变量保持未初始化。
您可以通过以下方式避免此问题
X(int i)
{
this.i = 20;
}
要么
X(int i)
{
this.i = i;
}
class X
{
final int i;
X()
{
i = 0;
}
你在上面说的基本上是,如果没有给出参数,你的i
等于0。 这与说i=0
或this.i=0
。 同样的事情,只有一个i
,所以this
不是真的需要。
另一方面,下面有2个i
实例,所以你需要确保Java知道哪一个是哪一个。 在这种情况下,假设你想等于i
的X
,在i
作为参数传递: this.i=i;
是你想要的。 “我的i
之类的应该是i
作为参数传递。
所以在这种情况下,如果你的构造函数接受一个int,它应该给你i
的价值20
。 如果你的参数是j
,因为j
没有在你的类中定义,它将i
作为你的类的i
。 但有2 i
,你应该确保哪一个是一个!
X(int i)//need to keep other than i
{
//the i of my class should be 20. remember! this.i=i if you want the i of your class to be equal to the parameter passed i
this.i = 20;
}
}
在上面的代码中,你永远不会初始化变量final int i
,它应该在声明这个变量时或在你的类的构造函数中完成,即使你正在做i = 20;
你正在引用int i
,它是该方法参数的一部分。
如果你想改变final int i
的值并在你的方法中有一个名为i
的参数,你必须调用this.i = 20;
它将被修复。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.