繁体   English   中英

Java中类的构造函数中的参数有什么问题?

[英]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=0this.i=0 同样的事情,只有一个i ,所以this不是真的需要。

另一方面,下面有2个i实例,所以你需要确保Java知道哪一个是哪一个。 在这种情况下,假设你想等于iX ,在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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM