首页 > 解决方案 > 为什么我必须使用 this 关键字来初始化构造函数中的实例变量?

问题描述

我对 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的授权: java this keyword inside constructor

标签: java

解决方案


让我们把构造函数放在一边,只从代码的角度来看它。

参数 rollnumber 和 name 是局部变量,它们的作用域只在函数中。所以当你说

rollnumber = rollnumber;

它只是将局部变量 rollnumber 的当前值分配给它自己(什么都不做)。没有办法区分rollnumber(函数内部的参数/位置变量)和实例变量rollnumber。

为了确保编译器理解我们想要的,我们使用

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

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

 rollnum = rollnumber;

将工作。


推荐阅读