`
ghost_away
  • 浏览: 17171 次
文章分类
社区版块
存档分类
最新评论

无需main方法打印hello word

 
阅读更多
public class Test {
static{
System.out.println("hello");
System.exit(0);
}
}


本身其实是借助 JVM 在装载类定义时,就会先执行static块这个特性,来得到输出的。
但是JVM在完成类定义装载后,就会用反射来查找main函数,此时如果找不到就会报错,但此时static块已经执行完毕了。
但这个程序又利用System.exit(0);来强制结束程序,所以JVM也就不会再去查找main函数并执行了。


你要确定这个类有以下几种情况才会被jvm的ClassLoader加载:
   a、new这个类的一个实例;
   b、访问类的静态变量或者静态方法
   c、反射
   d、访问该类的子类,即创建子类对象
   e、标示该类为启动类

应该有6种的 ,好像b包含了两种 ,以上就是类的主动使用,jvm会加载类,加载类才会初始化 ,才会运行static模块
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics