第一个问题我觉得应该是对的吧,因为自己实际跑了一下如下代码
package staticSuper;
class StaticSuper {
static {
System.out.println("super static block");
}
StaticSuper(){
System.out.println("super constructor");
}
}
public class StaticTests extends StaticSuper {
static {
System.out.println("static block");
}
StaticTests(){
System.out.println("main class");
}
public static void main(String args[]) {
// System.out.println("in main");
}
}
结果是
super static block
static block
之所以会问第二个问题,是因为继续学(初学者)看到一个简单的 GUI 程序代码是这样的
package simpleGui2;
import javax.swing.*;
import java.awt.event.*;
public class SimpleGui2 implements ActionListener{
JButton button;
public static void main(String[] args) {
SimpleGui2 gui = new SimpleGui2();
gui.go();
}
public void go() {
JFrame frame = new JFrame();
button = new JButton();
button.addActionListener(this); //这个 this 传入的应该就是这个主类的实例对象吧?
frame.getContentPane().add(button);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300,300);
frame.setVisible(true);
}
public void actionPerformed(ActionEvent evnet) {
button.setText("I've been clicked!");
}
}
带注释的那一行里的 this 应该就是这个主类的实例对象吧?
但我稍稍多想了一些,就有点疑惑,那就是既然有了这个因为是主类而必须产生在堆上的实例对象,那为什么有许多程序都还要在 main 方法里再 new 一个出来呢?为何不直接用 this 呢?
JAVA 才初学,可能许多概念都还没学习到,望海涵..谢谢..
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.