我知道为什么 main 方法是静态的。如果它是静态的,则不需要通过 JVM 实例化该类。没有对象我们可以调用它。但是为什么不需要对象来调用静态方法呢?
谁能解释一下?
静态方法与类相关联,而不与类的任何实例相关联。
请参阅http://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html
考虑这个例子,有一个家庭有一个母亲和三个孩子。妈妈给每个孩子带了三个冰淇淋蛋筒,但只给三个孩子带了一个 PSP。所有孩子都使用相同的 PSP,但他们有自己的冰淇淋。
这里冰淇淋是一个非静态的东西(方法/变量),PSP 是静态的东西,Mother 是类,children 是对象。
这很简单。静态属于一个类,它对一个类的所有对象都是通用的。非静态事物是特定于对象的。
是的,您不需要实例对象来调用类的静态方法是正确的,因为静态方法属于一个类,而不属于该类的实例。此外,您不能在静态方法中使用实例变量,因为实例变量属于实例。
该main()
方法是静态的,因为它们可以被运行时引擎调用,而无需实例化父类的实例。
Static
声明中带有 static 修饰符的方法应该使用类名调用,而不需要创建类的实例
成员变量和方法需要对象,但静态是应用程序变量或函数,这是静态不需要对象的原因之一。
因为 JVM 可以为您调用该方法(但它认为合适)。否则,兔子洞会在哪里结束?interface
他们可以通过使用方法创建一个 known 本身来完成您的建议main
。例如:
interface ApplicationStarter
{
void start(String []args);
}
但随后存在与构造函数相关的问题。存在许多遇到类似问题的框架,例如 SPI,出于类似原因,它需要默认(无参数)构造函数。此类框架在其预先知道的要求(例如,无参数构造函数或可能不适Serializeable
用于某些其他框架)时会失败,并且初学者会发现这很难。将应用程序的最基本部分“复杂化”并不是实现采用的好方法。
对于应用程序的起始点/入口点,依赖一个已知的入口点 ( main
) 要容易得多,这类似于几乎所有其他语言:不用担心对象不构造或覆盖。
当我们执行 java 文件时,java 编译器会自动加载并执行静态成员。
我是java新手,如果我的回答有误请见谅。
因为它属于你不需要手动创建的类对象。