当前位置: 首页 > 知识库问答 >
问题:

另一个类中字段的访问值[重复]

狄凯
2023-03-14

我试图理解变量的范围,以及如何使用从一个类初始化的变量,并在另一个类中使用它们,但接下来我的理解就卡住了。

我有一个类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);

    }
}

如果随后在main中调用该方法,则值val将显示为0,而不是33。如何在另一个类中访问内存中的值?

谢谢

共有2个答案

锺离赤岩
2023-03-14

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

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

public void testing(Test1 instance){
    System.out.println(instance.getX());
}
龙新荣
2023-03-14

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

在您的main方法中,您使用该模具创建一个新的Test1对象。在测试方法中,您使用相同的模具创建一个新的Test1对象。但是,在您制作的第一个对象中,您将x的值设置为33,但对其他对象没有做同样的事情。

把它想象成一个篮球。你有一个模子来做篮球,然后用它来做两个篮球。你给第一个篮球打满33%的空气,但不要给第二个篮球注入任何空气。仅仅因为使用了相同的模具,并不意味着两个篮球都能抽到33%的空气。

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

 类似资料:
  • 问题内容: 请忘记设计。我知道OOP指定私有对象是该类的私有对象。我的问题是,为什么将OOP设计为使私有字段具有类级别的访问权限而不具有对象级别的访问权限? 问题答案: private修饰符强制执行封装原理。 这个想法是,“外部世界”不应更改Person内部流程,因为Person的实现可能会随时间而变化(并且你将不得不更改整个外部世界以解决实现方面的差异-这几乎是不可能的)。 当Person实例访

  • 我是OOPs新手,如果这听起来很基本,我很抱歉。我有一个具有以下代码的类:- 现在假设我在同一个包中有另一个类“Main”。有什么方法我可以创建一个类的对象'内部'在'主'与类'外部'参考? 我尝试了以下操作(这是抛出错误):- “Main”和“Outer”类都在同一个包中。另外,我的主要目标是了解是否有任何方法可以在main方法中创建类Inner的对象,如下所示:-outerO1=newinne

  • 我有这个问题。但我很难解释,因为我不知道确切的术语。希望有人能理解。我会尽力描述。我觉得这与

  • 和访问字段,如: 因为我希望有更好的方法来做到这一点。

  • 我是一名Java程序员初学者。我试图在类交通中访问类车中的两个列表,这样我就可以执行while循环,循环直到主类中的列表为空 这就是我现在掌握的代码,我试着从普通车上扩展流量,但没有成功,我被卡住了。我该怎么解决这个问题?