Java中关于静态代码块,非静态代码块,构造方法,静态方法,一般方法执行顺序

时间:2022-04-05 15:53:56

ok!能上代码就别bb!Java中关于静态代码块,非静态代码块,构造方法,静态方法,一般方法执行顺序


public class StaticTest {


static{
/*静态代码块,静态代码块是在虚拟机加载类的时候,
就执行的,而且只执行一次。如果static代码块有多个,
JVM将按照它们在类中出现的先后顺序依次执行它们,每个代码块只会被执行一次。*/


System.out.println("hi!我是静态代码块1!");



}
static{
/*静态代码块,静态代码块是在虚拟机加载类的时候,
就执行的,而且只执行一次。如果static代码块有多个,
JVM将按照它们在类中出现的先后顺序依次执行它们,每个代码块只会被执行一次。*/


System.out.println("hi!我是静态代码块2!");



}

{
//非静态代码块是在类new一个实例的时候执行,而且是每次new对象实例都会执行。在构造方法前执行
System.out.println("我是非静态代码块1");

}
{
//非静态代码块是在类new一个实例的时候执行,而且是每次new对象实例都会执行。在构造方法前执行
System.out.println("我是非静态代码块2");

}

public StaticTest(){
System.out.println("我是构造方法!");
}
public static void main(String [] args){

StaticTest s1=new StaticTest();
s1. runNormal();
runStatic();
System.out.println("--------------------");
StaticTest s2=new StaticTest();
s2. runNormal();
runStatic();


}

public static void runStatic(){

System.out.println("我是静态方法!");
}

private void runNormal(){
System.out.println("我是一般方法!");
}
}



执行结果:


hi!我是静态代码块1!
hi!我是静态代码块2!
我是非静态代码块1
我是非静态代码块2
我是构造方法!
我是一般方法!
我是静态方法!
--------------------
我是非静态代码块1
我是非静态代码块2
我是构造方法!
我是一般方法!
我是静态方法!


如上,包含两个静态代码块,所以在调用该类时执行两个方法各一次且仅一次.非静态方法new一个实例的时候执行,然后执行构造方法.