为什么我必须使用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);
}
}

我想理解为什么上面的代码返回卷号和名称的默认值(0和null(,除非我使用"0";这个";引用构造函数内部的变量,如下所示:

this.rollnumber=卷数;this.name=名称;我知道这指的是当前对象,但我的观点是,当构造函数为创建对象而运行时,它是否默认不理解这些变量与正在创建的对象有关。

是不是,如果不使用这个关键字,它们只是";类变量";并且不要附加到正在创建的对象上。

在这里发现了一个类似的Q,但没有完全理解使用它的授权:构造函数中的java this关键字

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

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

rollnumber = rollnumber;

它只是将局部变量rollnumber的当前值分配给自己(不执行任何操作(。无法区分rollnumber(函数中的参数/loca变量(和实例变量rollnumber。

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

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

为了避免这种情况,您可以将实例变量命名为其他名称,如rollnum。通过这种方式,编译器将在本地作用域中搜索rollnum(意味着在构造函数中,找不到(,然后在更高的作用域中,它将作为实例变量找到并正确分配。

rollnum = rollnumber;

将起作用。

最新更新