为什么当我调用没有对象的非静态方法时它会起作用

Оле*_*ков 0 java

当我看到它有效时,我感到非常惊讶。请解释原因

https://github.com/bethrobson/Head-First-Java/blob/master/chap12/MiniMusicPlayer3.java

public void setUpGui() {  //  <------- it is not static
    ml = new MyDrawPanel();
    f.setContentPane(ml);
    f.setBounds(30, 30, 300, 300);
    f.setVisible(true);
}

public void go() {    
    setUpGui();  //  <---  call without object.setUpGui() !!! 
Run Code Online (Sandbox Code Playgroud)

为什么它有效?

Hir*_*uri 6

对非静态方法 setUpGui() 的调用是从非静态方法 go() 执行的。

当 go() 运行时,必须有一个周围类 MiniMusicPlayer3 的实例,并且可以通过“this”访问它。当执行从 go() 转移到 setUpGui() 时,此上下文仍然有效。

该对象是在调用 go() 方法之前调用构造函数时创建的。