java中静态方法的用途

java中静态方法的用途,java,static,Java,Static,我对java中静态方法的用法感到困惑,例如,如果mainmethod是静态的,那么它是有意义的,但是在编码时,我们有对象作为例子 JFrame frame= new JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// here why not frame.EXIT_ON_CLOSE 当我们使用 GridBagConstraints c= new GridBagConstraints();// we have

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

 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; 

那么有人能解释一下有什么特别的原因吗?

JFrame.EXIT\u ON\u CLOSE
不是一种方法。这是一个静态场。看这个


如果您不希望某些功能与类而不是对象关联,那么可以使用静态方法。

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


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

-
JFrame.EXIT on\u CLOSE
是一个静态变量(字段)而不是
JFrame
类中的方法


-
静态
方法是类方法,例如在数学类中,没有实例变量,其构造函数是私有的。所以static在那里工作得很好…

static
意味着没有与之关联的对象实例。例如,如果
main
方法是静态的,那么它是有意义的“不,它不是静态的,但我可能不应该在一个纯Java的问题中开始这样的讨论……好吧,我只想问一下,不使用对象(虽然我们有)有什么特殊目的吗?这是设计决策。在这种情况下,正如dasblinkenlight所解释的,无论有多少JFrame对象退出,都需要产生相同的行为,因此最好与类关联,而不是与实例关联。让我们假设,如果每个实例在退出时需要不同的行为,那么我们需要使at作为实例特定于静态实例。@SikanderNawaz您可以使用对象,但这没有用。。在comiplation中,对象引用被类名替换automatically@SikanderNawaz字体很高兴它有帮助。祝你好运。我想补充一点,静态方法通常像数学函数。意味着没有副作用,并且对于相同的输入总是相同的输出。人们这样做的一个原因是,您不需要创建对象的实例来访问这些字段。因此,例如,如果您想在对话框中向用户展示JFrame退出行为的各种选择,您不需要新建一个JFrame对象来查看这些选择。@NabilA。情况未必如此;例如,如果静态方法更改了静态变量。例如,singleton id生成器。@RobAu这就是我通常编写的原因。但是,如果您想创建一个函数,那么最好使用静态方法。