gpt4 book ai didi

java - 从静态上下文引用非静态变量

转载 作者:行者123 更新时间:2023-12-02 03:30:46 24 4
gpt4 key购买 nike

我正在阅读 Kathy 和 Bert SCJP 1.6 并遇到以下代码:

class Bar {
int barNum = 28;
}

class Foo {
Bar myBar = new Bar();
void changeIt(Bar myBar) {
myBar.barNum = 99;
System.out.println("myBar.barNum in changeIt is " + myBar.barNum);
myBar = new Bar();
myBar.barNum = 420;
System.out.println("myBar.barNum in changeIt is now " + myBar.barNum);
}
public static void main (String [] args) {
Foo f = new Foo();
System.out.println("f.myBar.barNum is " + f.myBar.barNum);
f.changeIt(f.myBar);
System.out.println("f.myBar.barNum after changeIt is "
+ f.myBar.barNum);
}
}

虽然这是在隐藏变量的主题下,但我无法理解如何在 main() 方法(静态)中引用非静态变量 myBar?

最佳答案

诀窍是 myBar 访问的上下文不是静态的。

通过编写 f.myBar 而不是简单地编写 myBar,您可以在存储在 f 中的实例上下文中访问它(本地变量)。

这是启动应用程序的常用模式的基础。

public class Main {
private final Foo param1;
private final Bar param2;


private Main( Foo initParam1, Bar initParam2 ) {
//initialise the fields
}

private void run() {
// execute the application
}

public static void main( String [] args ) {
// parse the command line arguments
Foo parsedParam1 = ...
Bar parsedParam2 = ...
Main main = new Main( parsedParam1, parsedParam2 );
main.run();
}
}

关于java - 从静态上下文引用非静态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26062051/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com