• 深入了解Java程序执行顺序


    先看代码:
    class Parent {     
        public static String p_StaticField = "父类--静态变量";    
        public String p_Field = "父类--变量";      
        // 下面这些是干什么的?解释以下,不是很明白 
        static {    
             System.out.println(p_StaticField);    
             System.out.println("父类--静态初始化块");    
         }      
        // 下面这是干什么的?不明白?为什么这么写     
         {    
             System.out.println(p_Field);    
             System.out.println("父类--初始化块");    
         }      
        public Parent() {    
             System.out.println("父类--构造器");    
         }    
    }       
    public class SubClass extends Parent {    
        public static String s_StaticField = "子类--静态变量"; 
        public String s_Field = "子类--变量";    
        // 静态初始化块    
        static {    
             System.out.println(s_StaticField);    
             System.out.println("子类--静态初始化块");    
         }    
         {    
             System.out.println(s_Field);    
             System.out.println("子类--初始化块");    
         }        
        public SubClass() {    
             System.out.println("子类--构造器");    
         }       
        public static void main(String[] args) { 
           new Parent();
          System.out.println("-------------------");
           new SubClass(); 
           System.out.println("-------------------");
           new SubClass();  
         }    

    程序的运行结果为:
    父类--静态变量
    父类--静态初始化块
    子类--静态变量
    子类--静态初始化块
    父类--变量
    父类--初始化块
    父类--构造器
    -------------------
    父类--变量
    父类--初始化块
    父类--构造器
    子类--变量
    子类--初始化块
    子类--构造器
    -------------------
    父类--变量
    父类--初始化块
    父类--构造器
    子类--变量
    子类--初始化块
    子类--构造器

    class A {
        public A() {
            System.out.println("A的构造方法");
        }
    
        public static int j = print();
    
        public static int print() {
            System.out.println("A print");
            return 521;
        }
    }
    
    public class B extends A {
        public B() {
            System.out.println("B的构造方法");
        }
    
        public static int k = print();
    
        public static int print() {
            System.out.println("B print");
            return 522;
        }
    
        public static void main(String[] args) {
            System.out.println("main start");
            B b = new B();     
            System.out.println("------------------------");
            A a = new B();
        }
    }

    输出:

    A print
    B print
    main start
    A的构造方法
    B的构造方法
    ------------------------
    A的构造方法
    B的构造方法

  • 相关阅读:
    做了一个非常小的WPS插件
    小幸福
    被迫积极
    将要从csdn搬过来了!
    游戏框架设计Ⅰ—— 游戏中的事件机制
    *VB中实现OpenGL的截屏(glReadPixels)
    *D3D中把场景保存为图片的方法
    *vc中检测内存泄露的工具VLD(visual leak detector) 转
    纯虚函数能为private吗?
    vc中调用Com组件的方法详解
  • 原文地址:https://www.cnblogs.com/huangjianping/p/7182085.html
Copyright © 2020-2023  润新知