美文网首页
JAVA中的静态代码块

JAVA中的静态代码块

作者: dlihasa | 来源:发表于2018-01-19 11:22 被阅读13次

在看android源码的时候看到了好久不见的静态代码块,写个小栗子来回忆一下这部分。

包含静态代码块的类A:

class A{
    static int va = 1;
    static String sa = "1";
    public A(){
        System.out.println("构造方法a");
    }
    
    {
        System.out.println("代码块a");
    }
    
    static{
        System.out.println("静态代码块a");
    }
    
    static{
        System.out.println("静态代码块a1");
    }
    
    public static void printStaticValue(){
        System.out.println(sa);
    }
    
    public void printValue(){
        System.out.println("=====a=====");
        System.out.println(va);
        System.out.println(sa);
    }
}

继承父类A并且同样包含静态代码块的类B:

class B extends A{

    public B(){
        System.out.println("构造方法b");
    }
    
    {
        System.out.println("代码块b");
    }
    
    static{
        System.out.println("静态代码块b1");
    }
    
    static{
        System.out.println("静态代码块b");
    }
    
    public void printValue(){
        System.out.println("=====super=====");
        super.printValue();
        System.out.println("=====b=====");
        System.out.println(va);
        System.out.println(sa);
    }
}

调用上面的类:

public class Teststatic {
    public static void main(String[] args) {
        System.out.println("------b--------");
        B b = new B();
        System.out.println("------b again--------");
        b = new B();
        System.out.println("------b1--------");
        B b1 = new B();
        System.out.println("------通过b1来打印一下静态变量");
        b1.printValue();
    }

}

运行结果如下:

------b--------
静态代码块a
静态代码块a1
静态代码块b1
静态代码块b
代码块a
构造方法a
代码块b
构造方法b
------b again--------
代码块a
构造方法a
代码块b
构造方法b
------b1--------
代码块a
构造方法a
代码块b
构造方法b
------通过b1来打印一下静态变量
=====super=====
=====a=====
1
1
=====b=====
1
1

可以看到无论生成多少个对象,静态代码块只执行一次,且静态代码块之间按照书写顺序来执行。

在上面基础上添加一行类调用静态方法的代码:

public class Teststatic {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println("------我先来执行以下静态方法-------");
        B.printStaticValue();//虽然b中没有该静态方法,但是继承了A,所以也就继承了A中的公共方法
        System.out.println("------b--------");
        B b = new B();
        System.out.println("------b again--------");
        b = new B();
        System.out.println("------b1--------");
        B b1 = new B();
        System.out.println("------通过b1来打印一下静态变量");
        b1.printValue();
    }
}

运行结果如下:

------我先来执行以下静态方法-------
静态代码块a
静态代码块a1
1
------b--------
静态代码块b1
静态代码块b
代码块a
构造方法a
代码块b
构造方法b
------b again--------
代码块a
构造方法a
代码块b
构造方法b
------b1--------
代码块a
构造方法a
代码块b
构造方法b
------通过b1来打印一下静态变量
=====super=====
=====a=====
1
1
=====b=====
1
1

可以看到通过类调用静态方法时同样会先执行静态代码块。

【待续...】

相关文章

网友评论

      本文标题:JAVA中的静态代码块

      本文链接:https://www.haomeiwen.com/subject/egkooxtx.html