ok!能上代码就别bb!
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一个实例的时候执行,然后执行构造方法.