美文网首页
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