为什么java从另一个类中获取一个类的旧变量值?
分为两类:为什么java从另一个类中获取一个类的旧变量值?,java,Java,分为两类: 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(); secon
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();
}
}
及
其结果是:
a from printInt1: 4
a from printInt2: 4
a from printInt1: 4
a from printInt2: 4
正如您所看到的,a
对于Second
的方法没有改变。但我不明白为什么会这样。我是这样看的:
a
(所以应该是5)UPD:这里也回答了这个问题:,因为我不能删除我的答案,这是因为您引用了
Main()
类中的变量a
。Main()
类中的值设置为4
在打印方法中,您可以创建新的Main()
对象(Main=newmain();
)。然后您将引用这些已创建的Main()
对象的变量a
,其值为4
a
在名为doAll()的方法中设置为5
。它仅在该方法内部有效,但在外部无效。在printInt
和printInt2
中,您创建一个新的Main
方法并访问该实例a
。由于在构造过程中,a
将始终设置为4
,这是您看到的唯一值
如果希望printInt
和printin2
访问在Main
方法中创建的Main
实例的a
字段,则需要以某种方式将其传递给它们
一个选项是Second
构造函数中的参数(即newsecond(main)
),在这种情况下,您需要在Second
中的字段中保留该参数
另一个需要较少更改的选项是,只需将要直接使用的
Main
实例传递给printInt
/printInt2
方法:second.printInt(Main)
,在第二个类add中
public class Second {
public void printInt() {
Main main = new Main();
main.doAll();
System.out.println("a from printInt1: " + main.a);
}
public void printInt2() {
Main main = new Main();
main.doAll()
int a = new main.a;
System.out.println("a from printInt2 " + a);
}
}
这是因为您正在方法中创建Main类的新实例。每个新实例都将变量
a
设置为4Try this,当声明a=5时,请尝试此操作。a=5您必须理解字段属于对象(非静态)的含义。您可能会假设只有一个a
。。。但是没有。当你把static
放在a
声明的前面时,整个故事都变了。试试我的回答:}Yeshwin Verma程序员,Iit不起作用(
public class Second {
public void printInt() {
Main main = new Main();
main.doAll();
System.out.println("a from printInt1: " + main.a);
}
public void printInt2() {
Main main = new Main();
main.doAll()
int a = new main.a;
System.out.println("a from printInt2 " + a);
}
}