关于java 的static代码块注意以及测试

public class Test {

    //非静态块:每次初始化一个对象,都会导致一次非静态块的执行;在构造函数执行之前执行
    //继承关系:父类的非静态块->父类的构造函数->自己的自由块->自己的构造函数
  
 {
       System.out.println("before");
 }
    static int x = 10;
    
    static{
        x+=5;
        System.out.println("static1");
    }
    public static void main(String[] args) {
        new Test();   
        new Test();
        System.out.println(x);

    }


    //静态块
    static {
        x/=3;
        System.out.println("static2");
    }
    public Test(){
        System.out.println("构造函数");
    }
   

}

注意:

 1.静态代码块会在类被加载时自动执行。且优先于非静态代码块和实例方法之前执行,有且只执行一次

 2.静态代码块只能定义在类里面,不能定义在方法里面。

 3.静态代码块里的变量都是局部变量,只在块内有效。

 4.一个类中可以定义多个静态代码块,按顺序执行,且先执行完所有的静态块,在进行调用

 5.静态代码块只能访问类的静态成员,而不允许访问实例成员。

 6.java中的自由块分为两种:静态块和非静态块

 7.当创建Test类的一个对象的时候,比如new Test()首先是类加载,然后才能new对象,静态块在类加载的时候就执行了,这就说明静态块在new对象之前就会执行,而且一个       类在第一次被使用的时候会被加载,然后在整个应用程序的生命周期当中不会再次被加载了,就加载这一次,所以这就说明,静态块就执行一次,不会执行第二遍!



输出结果:

static1
static2
before
构造函数
before
构造函数
5

你可能感兴趣的:(java)