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

为什么java从一个类中获取另一个类的旧变量值?[副本]

金阳曜
2023-03-14

有两类:

public class Main {
    int a = 4;
    Second second = new Second();

    public static void main(String[] args) {
        Main main = new Main(); 
        main.doAll();
    } 

    public void doAll() {
        second.printInt();
        second.printInt2();

        a = 5;

        second.printInt();
        second.printInt2();
    }
} 

public class Second {

    public void printInt() {
        Main main = new Main();
        System.out.println("a from printInt1: " + main.a);
    }

    public void printInt2() {
        int a = new Main().a;
        System.out.println("a from printInt2 " + a);
    }
}
a from printInt1: 4
a from printInt2: 4
a from printInt1: 4
a from printInt2: 4
    null

UPD:这个问题在这里也回答了:静态和非静态字段,因为我不能删除我回答的一个

共有1个答案

诸葛雅达
2023-03-14

printintprintint2中,创建一个新的main方法,并访问该实例a。因为在构造过程中总是被设置为4,所以这是您看到的唯一值。

如果希望printintprintint2访问在main方法中创建的main实例的a字段,则需要以某种方式将其传递给它们。

一个选项是Second构造函数中的参数(即new Second(main)),在这种情况下,您需要在Second的字段中保留它。

另一个需要较少更改的选项是将要直接使用的main实例传递给printint/printint2方法:second.printint(main)

 类似资料:
  • 我目前正在与tkinter一起完成一项学校作业,为用户创建一个图形用户界面以输入他们的输入。我决定将输入分成不同的页面,以避免用户被问题淹没,并且不需要滚动 每一页都有一系列标签和条目,在一个右除数和一个左除数上分开,我已经设法在每一页上实现了这一点,付出了一些努力。这是我工作代码的简化版本: 然而,在将每个页面拆分为两个不同的Frame()容器时,我遇到了两个问题: 用ipadx和ipady设置

  • 问题内容: 我有两节课 在ABC班 我想在另一个课程中使用它,让我们说DEF课程 但是它说java.lang.NullPointerException,你知道吗?谢谢 这是我的ABC类的代码,我想在另一类> _ <中使用它们 问题答案: 您需要在内存中分配ABC,否则它指向,因此NullPointerException: 编辑 :好的,如果ABC没有像这样的零参数构造函数: 您有两种选择来解决您的

  • 我在class中定义了一个变量。它可以很好地执行Account类中定义的提款功能。但是,我希望访问Sav\u acct类中存在的函数interest中的变量值。它将收回的值取为0。如何使用兴趣函数中的函数中的函数的值,以便执行正确的数学运算? 导入java。util。扫描仪; 类别帐户{ 双重撤回; } 作废取款(){ 扫描仪sc=新扫描仪(系统英寸); 系统出来println(“您想提取多少?”

  • 我正在做一个新的项目,我试图建立一个货币系统,在那里我可以提取它,以转移到另一个变量(在另一个类)。我在解决这个问题上遇到了一些问题,我对如何编写代码感到非常失望。下面是我想链接的类(我想让“coinsamount”在我做/存款时进入类2“amount” 第2类:

  • 问题内容: 我想将一个类变量传递给另一个类,并使其成为该类的类变量。在以下情况下我该怎么做? 问题答案: 很难理解您正在问的问题,但这是一个可能的答案: 使B类成为A的子类: 如果重新声明为,则会出现一种情况,其中存在一个可以称为或的属性。(或在任一或刚刚…甚至作为或地方,并有类型和分别。) 如果您无法在和(或,以及一些包含声明的第三类)之间创建直接或子类型关系,那么您很不走运。他们无法共享声明。