有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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?
    }
}

共 (4) 个答案

  1. # 1 楼答案

    你如何判断定义不完整

    记住,main方法也是该类的一部分。在上面的代码中,您还可以使用该类的对象调用main方法

    class Test
    {
      public static void main(String args[])
      {
        // whatever code you want     
      }
    }
    class Test2
    {
      public static void main(String args[])
      {
        // you can call the main method of the Test class
        Test obj = new Test();
          obj.main(args);
        /*
         *  see when you can call the main method of Test class in class Test2 because
         *  compiler will treat the **main** as a static method thats it.
         */
      }
    }
    

    编译器将把main作为一个静态方法来处理。因此,当您尝试在main方法中创建自类的对象时,编译器会将main方法当作静态方法<强>(平均定义是它不是空白类),因此编译器将允许您创建没有任何错误的自类对象。强>

  2. # 2 楼答案

    Java代码不是在读取时执行的,而是“编译的”,因此在执行之前可以看到整个文件。Java编译器对输入执行多次传递,这就是为什么函数可以调用在同一文件中定义的另一个函数(而在C语言和C++编程语言中,则在提供任何实例化或引用函数或类型的代码之前,必须为函数或类型提供声明)。p>

  3. # 3 楼答案

    在实例化对象之前,类将完全加载到JVM的类存储库中

    静态方法不需要类的实例(只要它不是内部类)

  4. # 4 楼答案

    公平地说,“我们知道,在类的定义完成之前,我们不能创建任何类的obj。”是正确的,但是编译行

    Test test=new Test();
    

    不创建新对象,它表示应在运行时创建新对象

    首先编译该类(该类不执行其中的任何语句),然后运行它,此时使用已编译的实例化(创建)一个新对象

    事实上,您可以在自己类的任何方法中创建对象(无论是静态还是实例)

    您应该注意的唯一问题是在自己的构造函数中创建Test对象。这将以StackOverflowError结束,因为您将无休止地递归调用构造函数