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的构造方法

  • 相关阅读:
    学习JNA,Jnative
    JNative用法注意事项
    使用JNA替代JNI调用本地方法
    傅盛读书笔记:下一个Moonshot是什么?
    华为内部狂转好文:有关大数据,看这一篇就够了
    ws2_32.dll的妙用与删除 (禁网)
    保护颈椎重点按这三大穴位(图)
    在java中调用python方法
    在Windows中实现Java调用DLL(转载)
    java程序员,英语那点事
  • 原文地址:https://www.cnblogs.com/huangjianping/p/7182085.html
Copyright © 2011-2022 走看看