Java 初始化构造函数的值
在下面的代码中,我声明了2个用户定义的构造函数,一个没有参数,另一个有3个参数,在这两种构造函数中,我都为实例变量赋值,当执行main方法时,没有参数的构造函数的输出为2,有3个参数的构造函数的o/p在第一种方式中为0,但当我尝试第二种方式时,零参数构造函数的o/p为2,3个参数构造函数的o/p为15,我在创建对象时传递参数的地方,现在我不明白为什么在第一种方式中输出为零Java 初始化构造函数的值,java,variables,constructor,instance,Java,Variables,Constructor,Instance,在下面的代码中,我声明了2个用户定义的构造函数,一个没有参数,另一个有3个参数,在这两种构造函数中,我都为实例变量赋值,当执行main方法时,没有参数的构造函数的输出为2,有3个参数的构造函数的o/p在第一种方式中为0,但当我尝试第二种方式时,零参数构造函数的o/p为2,3个参数构造函数的o/p为15,我在创建对象时传递参数的地方,现在我不明白为什么在第一种方式中输出为零 public class Main { int x, y, z; Main() { x
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);
}
}
当您使用
x=20
时,您将为传递给构造函数的参数x
分配一个新值,而不是将该值分配给实例成员。当您编写this.x
时,它显然绑定到实例成员
如果您仍然对它们感到困惑,请将参数名称更改为其他名称并进行检查。当您使用
x=20
时,您正在为传递给构造函数的参数x
分配一个新值,而不是将该值分配给实例成员。当您编写this.x
时,它显然绑定到实例成员
如果您仍然对它们感到困惑,请将参数名称更改为其他名称并进行检查。
此
引用调用该方法的当前对象引用。因此,在变量引用当前对象实例变量之前使用this
如果不使用this
,则它们指向在参数中传递的变量
但是,如果您更改了函数参数名称,然后仅使用
x
,它将引用当前对象实例变量。此
引用调用方法的当前对象引用。因此,在变量引用当前对象实例变量之前使用this
如果不使用this
,则它们指向在参数中传递的变量
但是,如果您更改了函数参数名称,然后仅使用
x
,它将引用当前对象实例变量。如果实例变量名称类似于参数名称,则此时显式使用“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;
}
在这里,它引用实例变量,并将为您提供适当的结果
干杯 如果实例变量名类似于参数名,那么此时显式使用“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;
}
在这里,它引用实例变量,并将为您提供适当的结果
干杯 我看到了你的代码。当您以//第一种方式使用构造函数时 答案为0,因为分别初始化为变量x、y、z的值20、20、10初始化为构造函数变量x、y、z,而不是类变量x、y、z 当您使用构造函数//第二种方法时
由于使用了“this”关键字,值被初始化为类变量x、y、z。这是指类变量,因此当您在第二种方式中使用构造函数时,结果显示为15。我看到了您的代码。当您以//第一种方式使用构造函数时 答案为0,因为分别初始化为变量x、y、z的值20、20、10初始化为构造函数变量x、y、z,而不是类变量x、y、z 当您使用构造函数//第二种方法时
由于使用了“this”关键字,值被初始化为类变量x、y、z。这是指类变量,因此当您在第二种方式中使用构造函数时,结果显示为15。Main(inta,intb,intc){a=20;b=20;c=10;this.x=a;this.y=b;this.z=c;}我做了这个更改,但我无法得到它。您能详细说明发生了什么吗,当我给构造函数的参数赋值时,o/p应该是15,而当你刚刚做
Main(inta,intb,intc){a=20;b=20;c=10;
,在x中有任何牵连吗?没有权利?因此值是zeroMain(inta,intb,intc){a=20;b=20;c=10;this.x=a;this.y=b;this.z=c;}根据这一变化,o/p很好,显示为30@SureshAtta@VinayPBhosale在最后一个例子中,您正在赋值。this.x=a;this.y=b;this.z=c;
Main(inta,intb,intc){a=20;b=20;c=10;this.x=a;this.y=b;this.z=c;}我做了这个更改,但我无法得到它发生了什么,请您详细说明,因为我给构造函数的参数赋值,所以o/p应该是15,而当您刚刚做Main(int a,int b,int c)时,它是0{a=20;b=20;c=10;
,x中是否有任何涉及?没有权利?因此值为zeroMain(intA,intB,intC){a=20;b=20;c=10;this.x=a;this.y=b;this.z=c;}根据这一变化,o/p很好,显示为30@SureshAtta@VinayPBhosale在最后一个例子中,你是赋值的。this.x=a;this.y=b;this.z=c;
现在我知道变量x=20的范围在这个构造函数中,我的方法无法访问这些变量,所以这就是为什么我现在得到o/p的原因变量x=20的范围在该构造函数内,我的方法无法访问该变量,这就是为什么我得到o/p也是零现在我理解变量x=20的范围在该构造函数内,我的方法无法访问该变量,这就是为什么我得到o/p也是零现在我理解v的范围变量x=20在该构造函数中,我的方法无法访问该变量,因此我将o/p设为零