首页 > 代码库 > 没有main方法真的不能执行代码了吗?
没有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:\Users\ProfessorRen>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/
没有main方法真的不能执行代码了吗?
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。