我对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;
所以有人可以解释一下我有什么特别的理由吗?
答案 0 :(得分:9)
静态方法和字段属于类中的所有对象,而不属于非静态方法和属性,属于类的特定实例。在您的示例中,无论您创建了多少JFrame frame
个对象,访问frame.EXIT_ON_CLOSE
都会产生相同的结果。为了明确说明这一事实,使用static
成员(也称为“类成员”)。
相同的逻辑适用于静态方法:如果方法不访问实例变量,则其结果将独立于对象的状态。 main(String[] args)
方法就是这样一个例子。其他常见示例包括各种工厂方法,基元的解析方法等。这些方法不对实例进行操作,因此它们被声明为静态。
答案 1 :(得分:7)
JFrame.EXIT_ON_CLOSE
不是一种方法。这是静态场。请参阅此doc。
如果您不希望某些与class not object相关的功能,那么您可以使用静态方法。
答案 2 :(得分:2)
- JFrame.EXIT_ON_CLOSE
是JFrame
类中的静态变量(字段)非方法。
- static
方法是类方法,例如在 Math 类中有没有实例变量,其构造函数是私有的。所以静态在那里工作得很好......