在下面的代码中,我已经声明了2个用户定义的构造函数,一个没有参数,另一个有3个参数,在构造函数中我为实例变量赋值,当main方法执行时,构造函数的输出没有参数是2,具有3个参数的构造函数的o / p在第一种方式中是0,但是当我尝试第二种方式时,零参数构造函数的o / p是2,对于3参数构造函数是15,我在那里传递在创建对象时的参数,现在我不明白为什么第一种方式输出为零。
public class Main {
int x, y, z;
Main() {
x = 2;
y = 2;
z = 2;
}
// first way
Main(int x, int y , int z) {
x = 20;
y = 20;
z = 10;
}
// second way
Main(int x, int y , int z) {
this.x = x;
this.y = y;
this.z = z;
}
public int sub() {
int m;
m = x + y - z;
System.out.println("the value is " + m);
return m;
}
}
以下是主要方法:
package demo;
public class Maintest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Main s = new Main();
int s1 = s.sub();
Main s3 = new Main(10,10,5);
int s2 = s3.sub();
System.out.println(s1);
System.out.println(s2);
}
}
答案 0 :(得分:5)
使用x=20
时,您要为传递给构造函数的参数x
分配新值,而不是将该值赋给实例成员。当您编写this.x
时,它会明确绑定到实例成员。
如果您仍然对它们感到困惑,请将参数名称更改为其他名称并检查。
答案 1 :(得分:0)
this
指的是调用该方法的当前对象引用。因此在变量引用当前对象实例变量之前使用this
。
如果你不使用this
,那么它们指向参数中传递的变量。
但是,如果您更改了函数参数名称,然后仅使用x
,则它将引用当前对象实例变量。
答案 2 :(得分:0)
如果实例变量名与参数名相似,那么当时使用'this'来解决JVM的歧义问题。
Main(int x, int y, int z) {
this.x = x;
this.y = y;
this.z = z;
}
这是标准做法。
但是如果你改变参数名称,那么它不是必须使用'this'。
Main(int xx, int yy, int zz) {
x = 20;
y = 20;
z = 10;
}
这里它指的是实例变量并且会给你正确的结果。
干杯!!!
答案 3 :(得分:-1)
我看到了你的代码。在//第一种方式使用构造函数时
你得到的答案是0,因为你初始化为变量x,y,z的值20,20,10分别被初始化为构造函数变量x,y,z而不是类变量x,y,z。
当你使用构造函数//第二种方式
时 由于使用了“this”关键字,值被初始化为类变量x,y,z。这是指类变量,因此当你以第二种方式使用时,构造函数会将结果显示为15。