zoukankan      html  css  js  c++  java
  • 深入了解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的构造方法

  • 相关阅读:
    JS高手
    如何删除textarea的移动版Safari的阴影?
    如何删除textarea的移动版Safari的阴影?
    CSS3----background:-webkit-gradient()渐变效果
    a:hover和a:visited书写顺序的重要性
    【经验】在CSS中定义a:link、a:visited、a:hover、a:active顺序
    领导干部要敢于担当
    关于cookie, iphone及chrome的异同
    刘云山:领导干部要敢于担当
    Javascript中Function,Object,Prototypes,__proto__等概念详解
  • 原文地址:https://www.cnblogs.com/huangjianping/p/7182085.html
Copyright © 2011-2022 走看看