10

我对java中静态方法的使用感到困惑,例如,如果方法是静态的,那么它是有意义 main 的,但是在编码时我们有例如对象

 JFrame frame= new JFrame(); 
 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// here why not frame.EXIT_ON_CLOSE

当我们使用相同的方式

 GridBagConstraints c= new GridBagConstraints();// we have an object but still
 c.anchor = GridBagConstraints.PAGE_END; 

那么任何人都可以解释一下有什么特殊原因吗?

4

3 回答 3

9

静态方法和字段属于类中的所有对象,而非静态方法和字段属于类的特定实例。在您的示例中,无论JFrame frame您创建多少对象,访问frame.EXIT_ON_CLOSE都会产生相同的确切结果。为了明确说明这一事实,static使用了成员(也称为“类成员”)。

相同的逻辑适用于静态方法:如果方法不访问实例变量,则其结果将与对象的状态无关。该main(String[] args)方法就是这样一个例子。其他常见的例子包括各种工厂方法、原语的解析方法等等。这些方法不对实例进行操作,因此它们被声明为静态的。

于 2012-12-02T13:48:04.240 回答
7

JFrame.EXIT_ON_CLOSE不是一种方法。它是静态字段。请参阅此文档

如果您不想要与类而不是对象相关的某些功能,那么您可以使用静态方法。

于 2012-12-02T13:45:32.553 回答
2

- JFrame.EXIT_ON_CLOSE静态变量(字段)而不是JFrameClass 中的方法。

- static方法是类方法,例如在Math类中没有实例变量,它的构造函数是私有的。所以静态在那里完美地工作......

于 2012-12-02T13:48:22.837 回答