zoukankan      html  css  js  c++  java
  • 没有main方法真的不能执行代码了吗?

    今天看北大慕课遇到一段代码,于是下载下来跑了一下,奇葩的是,没有main方法既没报错,还出了结果。

    下面贴出代码:

    class InitialTest
    {
        public static void main(String[] args) 
        {
            new InitialTest2(6);
        }
        int n=10;  //step2
        {
            n++;
            System.out.println("InitialTest..."+n);
        }
        
        static int x;
        static 
        {
            x++;
            System.out.println("static..." +x);
        }
        
    }
    
    class InitialTest2 extends InitialTest{
        InitialTest2(int a){ 
            this.a=a; 
            System.out.println("this.a=" + a );
        }
        int a;
        {
            System.out.println("InitialTest2..."+this.a);
        }
        static
        {
            x++;
            System.out.println("static2..." +x);
        }
    }
    执行:
    InitialTest
    static...1
    static2...2
    InitialTest...11
    InitialTest2...0
    this.a=6
    

     

    执行:

    InitialTest2
    static...1
    static2...2
    InitialTest...11
    InitialTest2...0
    this.a=6
    

      于是乎查阅很多资料,发现这种解释相对靠谱:

    实际上人家说“Java应用程序必须从main()方法开始运行”这句话千真万确,不容置疑的。那上面的例子如何解释呢?
     
    原因在于Java虚拟机在执行InitialTest2的时候,首先加载类,然后执行内部的静态块,执行完静态块后才去调用main方法。
     
    可是,在静态块中,System.exit(0)已经强制性的让程序退出了,而根本就没机会调用main方法。而且,InitialTest2是在静态块中输出的,这就给初学者一个错觉。
    继续探究,注释了InitialTest类中main方法那一段,看看还能不能执行;结果在eclipse中不能直接运行了。。。
    继续探究,仅注释InitialTest类中main方法中new InitialTest2(6)这一句;结果报错了。。。
    错误: 在类 InitialTest2 中找不到 main 方法, 请将 main 方法定义为:
       public static void main(String[] args)
    

     继续探究,把文件名改成InitialTest2.java(原文件名为InitialTest.java) 直接cmd运行:

    C:UsersProfessorRen>D:
    
    D:>javac InitialTest2.java
    
    D:>java InitialTest2
    static...1
    static2...2
    InitialTest...11
    InitialTest2...0
    this.a=6
    
    D:>
    

      接着上面继续探究,把main方法那一段注释,放在cmd下执行,编译通过,但运行报错了。。。

    吃饭去,有空继续。。。。。。
    参考链接:http://lavasoft.blog.51cto.com/62575/106321/
  • 相关阅读:
    OCP-1Z0-053-V12.02-40题
    OCP-1Z0-053-V12.02-255题
    OCP-1Z0-053-V12.02-407题
    OCP-1Z0-053-V12.02-298题
    OCP-1Z0-053-V12.02-38题
    OCP-1Z0-053-V12.02-274题
    OCP-1Z0-053-V12.02-159题
    OCP-1Z0-053-V12.02-406题
    OCP-1Z0-053-V12.02-369题
    OCP-1Z0-053-V12.02-610题
  • 原文地址:https://www.cnblogs.com/xunzhaorendaxia/p/7041050.html
Copyright © 2011-2022 走看看