将值初始化为构造函数

时间:2017-02-16 11:52:52

标签: java variables constructor instance

在下面的代码中,我已经声明了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);
    }
}

4 个答案:

答案 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。