java为什么可以在自己类的主方法中创建对象?
正如我们所知,我们不能创建任何类的obj,除非类的定义 完成了。那个么,我们如何能够在它自己的类的主方法中创建obj呢
class Test
{
public static void main(String args[])
{
Test test=new Test(); //yet class definition of Test class is not completed still it is permitted! why?
}
}
# 1 楼答案
你如何判断定义不完整
记住,main方法也是该类的一部分。在上面的代码中,您还可以使用该类的对象调用main方法
编译器将把main作为一个静态方法来处理。因此,当您尝试在main方法中创建自类的对象时,编译器会将main方法当作静态方法<强>(平均定义是它不是空白类),因此编译器将允许您创建没有任何错误的自类对象。强>
# 2 楼答案
Java代码不是在读取时执行的,而是“编译的”,因此在执行之前可以看到整个文件。Java编译器对输入执行多次传递,这就是为什么函数可以调用在同一文件中定义的另一个函数(而在C语言和C++编程语言中,则在提供任何实例化或引用函数或类型的代码之前,必须为函数或类型提供声明)。p>
# 3 楼答案
在实例化对象之前,类将完全加载到JVM的类存储库中
静态方法不需要类的实例(只要它不是内部类)
# 4 楼答案
公平地说,“我们知道,在类的定义完成之前,我们不能创建任何类的obj。”是正确的,但是编译行
不创建新对象,它表示应在运行时创建新对象
首先编译该类(该类不执行其中的任何语句),然后运行它,此时使用已编译的类实例化(创建)一个新对象
事实上,您可以在自己类的任何方法中创建对象(无论是静态还是实例)
您应该注意的唯一问题是在自己的构造函数中创建
Test
对象。这将以StackOverflowError
结束,因为您将无休止地递归调用构造函数