Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 初始化构造函数的值_Java_Variables_Constructor_Instance - Fatal编程技术网

Java 初始化构造函数的值

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

在下面的代码中,我声明了2个用户定义的构造函数,一个没有参数,另一个有3个参数,在这两种构造函数中,我都为实例变量赋值,当执行main方法时,没有参数的构造函数的输出为2,有3个参数的构造函数的o/p在第一种方式中为0,但当我尝试第二种方式时,零参数构造函数的o/p为2,3个参数构造函数的o/p为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);
    }
}

当您使用
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设为零