6

我知道为什么 main 方法是静态的。如果它是静态的,则不需要通过 JVM 实例化该类。没有对象我们可以调用它。但是为什么不需要对象来调用静态方法呢?

谁能解释一下?

4

8 回答 8

7

静态方法与类相关联,而不与类的任何实例相关联。

请参阅http://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html

于 2013-04-26T05:16:13.037 回答
6

考虑这个例子,有一个家庭有一个母亲和三个孩子。妈妈给每个孩子带了三个冰淇淋蛋筒,但只给三个孩子带了一个 PSP。所有孩子都使用相同的 PSP,但他们有自己的冰淇淋。

这里冰淇淋是一个非静态的东西(方法/变量),PSP 是静态的东西,Mother 是类,children 是对象。

这很简单。静态属于一个类,它对一个类的所有对象都是通用的。非静态事物是特定于对象的。

于 2013-04-26T05:50:37.257 回答
0

是的,您不需要实例对象来调用类的静态方法是正确的,因为静态方法属于一个类,而不属于该类的实例。此外,您不能在静态方法中使用实例变量,因为实例变量属于实例。

于 2013-04-26T08:00:43.693 回答
0

main()方法是静态的,因为它们可以被运行时引擎调用,而无需实例化父类的实例。

Static声明中带有 static 修饰符的方法应该使用类名调用,而不需要创建类的实例

于 2013-04-26T05:20:35.307 回答
0

成员变量和方法需要对象,但静态是应用程序变量或函数,这是静态不需要对象的原因之一。

于 2013-04-26T05:16:01.837 回答
0

因为 JVM 可以为您调用该方法(但它认为合适)。否则,兔子洞会在哪里结束?interface他们可以通过使用方法创建一个 known 本身来完成您的建议main。例如:

interface ApplicationStarter
{
    void start(String []args);
}

但随后存在与构造函数相关的问题。存在许多遇到类似问题的框架,例如 SPI,出于类似原因,它需要默认(无参数)构造函数。此类框架在其预先知道的要求(例如,无参数构造函数或可能不适Serializeable用于某些其他框架)时会失败,并且初学者会发现这很难。将应用程序的最基本部分“复杂化”并不是实现采用的好方法。

对于应用程序的起始点/入口点,依赖一个已知的入口点 ( main) 要容易得多,这类似于几乎所有其他语言:不用担心对象不构造或覆盖。

于 2013-04-26T05:17:09.463 回答
0

当我们执行 java 文件时,java 编译器会自动加载并执行静态成员。

我是java新手,如果我的回答有误请见谅。

于 2013-06-22T20:39:00.703 回答
0

因为它属于你不需要手动创建的类对象。

于 2021-12-27T08:14:20.547 回答