为什么我必须使用this关键字来初始化构造函数中的示例变量?

ruyhziif  于 2021-07-12  发布在  Java
关注(0)|答案(1)|浏览(349)

这个问题在这里已经有答案了

我应该什么时候在课堂上使用“this”(18个答案)
5个月前关门了。
我对java非常陌生,尝试使用构造函数初始化对象变量的值:

public class Javaprog {
int rollnumber;
String name;

Javaprog(int rollnumber, String name) {
rollnumber = rollnumber;
name = name;
}

public static void main(String[] args) {
Javaprog student1 = new Javaprog(12, "Simon");
System.out.println(student1.rollnumber);
System.out.println(student1.name);
        }
}

我想理解为什么上面的代码返回rollnumber和name的默认值(0和null),除非我使用“this”引用构造函数中的变量,如下所示:
this.rollnumber=卷号;this.name=名称;我知道这指的是当前对象,但我的观点是,当构造函数运行以创建对象时,它是否默认不理解这些变量与正在创建的对象相关。
如果不使用这个关键字,它们只是“类变量”,不会附加到正在创建的对象。
在这里发现了一个类似的q,但是没有完全理解使用this:javathis关键字的命令

5lhxktic

5lhxktic1#

让我们把构造函数放在一边,从代码的Angular 来看待它。
参数rollnumber和name是局部变量,它们的作用域仅在函数中。所以当你说

rollnumber = rollnumber;

它只是将局部变量rollnumber的当前值赋给自身(不做任何操作)。无法区分rollnumber(函数中的参数/loca变量)和示例变量rollnumber。
为了确保编译器理解我们想要的,我们使用

this.rollnumber (referring to instance variable) = rollnumber (parameter);

为了避免这种情况,可以将示例变量命名为其他名称,如rollnum。通过这种方式,编译器将在本地范围内(即在构造函数中,未找到)搜索rollnum,然后在更高的范围内搜索rollnum,在该范围内,它将作为示例变量找到并正确分配。

rollnum = rollnumber;

会有用的。

相关问题