* static{}:jvm 加载类时创建一次,实例化对象时不再执行
* {}:每次new()实例化对象时执行,优先级高于构造函数
public
class StaticOrNotStaticCode {
public StaticOrNotStaticCode () {
System.out.println(
"构造函数执行了");
}
{
System.out.println(
"非静态方法块执行了");
}
static{
System.out.println(
"静态方法块执行了");
}
public
void test(){
System.out.println(
"执行了test方法");
}
public
static
void main(
String[] args) {
System.out.println(
"main方法执行了");//执行到这里时,jvm先加载了static{},执行里面代码,然后输出这里的sysout,未执行{}
StaticOrNotStaticCode staticOrNotStaticCode =
new StaticOrNotStaticCode();
//先{}然后构造函数,未static{}
staticOrNotStaticCode.test();//test()方法
StaticOrNotStaticCode staticOrNotStaticCode1 =
new StaticOrNotStaticCode();
//再次先{}然后构造函数,未static{}
staticOrNotStaticCode1.test();
//test()方法
}
}
运行结果:
静态方法块执行了
main方法执行了
非静态方法块执行了
构造函数执行了
执行了test方法
非静态方法块执行了
构造函数执行了
执行了test方法