无需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模块