Ama*_*ver 2 java static non-static
我正在阅读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);
}
}
Run Code Online (Sandbox Code Playgroud)
虽然它是阴影变量的主题,但我无法理解如何在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();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
189 次 |
| 最近记录: |