从另一个类访问字段的值

时间:2018-06-25 19:09:13

标签: java

我试图了解变量的范围,以及如何使用从一个类初始化的变量并在另一个类中使用它们,但陷入我的理解之中。

我有一个Test1类,定义如下:

public class Test1 {

    private int x;

    public int getX() {
        return x;
    }

    public void setX(int x) {
        this.x = x;
    }
}

我在main中称这堂课:

public class Main {

    public static void main(String[] args) {
    Test1 test1 = new Test1();
    Test2 test2 = new Test2();

    test1.setX(33);
    int y = test1.getX();
    System.out.print(y);  // prints 33

    test2.testing(); // method outputs 0 instead of showing the value of X

    }
}

我还有另一堂课Test2

public class Test2 {
    public static void testing() {
        Test1 test1 = new Test1();

        int val = test1.getX();
        System.out.print(val);

    }
}

如果我随后在主目录中调用该方法,则val的值将显示0而不是33。如何在另一个类中访问getX()的内存中的值?

谢谢

2 个答案:

答案 0 :(得分:1)

将类视为用于创建新对象的“模具”。

在您的main方法中,使用该模具创建一个新的Test1对象。在testing方法中,使用相同的模具创建新的Test1对象。但是,在创建的第一个对象中,您将x的设置为33,但没有对另一个对象执行相同的操作。

像篮球一样思考。您有一个制作篮球的模具,并用它来制作两个篮球。您给第一个篮球加气时要充满33%的空气,但不要在第二个篮球中放任何空气。仅仅因为使用了相同的模具,并不意味着两个篮球都抽了33%的空气。

编辑:这是一个很好的视频,解释了示波器,应该可以帮助您! https://www.youtube.com/watch?v=Y2iN3TO5qOQ

答案 1 :(得分:0)

看到0的原因是因为您正在创建Test1的新实例,并在getX()调用中引用该实例。

为了查看类的现有实例的值,您必须将该实例传递到您的方法中。例如:

public void testing(Test1 instance){
    System.out.println(instance.getX());
}