码迷,mamicode.com
首页 > 编程语言 > 详细

java程序初始化顺序

时间:2018-07-16 23:10:24      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:ack   静态代码块   类静态变量   父类   print   函数   void   ora   静态   

 使用场景:  在java程序中,当实例化对象时,对象的所在类的所有成员变量首先要进行初始化,只有当所有类成员完成初始化后,

才会调用对象所在类的构造函数创建对象

     初始化的原则

   (1)静态对象优先于非静态对象初始化,静态对象只能初始化一次,但非静态对象可以初始化多次。

   (2)超类优先于派生类初始化。

  (3)按照成员变量定义的顺序来进行初始化,即使变量定义散布于方法定义之中,它们仍然在任何方法(包括构造器)被调用前初始化。

package test;
/*java程序初始化的顺序:超类静态变量 超类静态代码块 子类静态变量 子类静态代码块 
 *  超类非静态变量 超类非静态代码块 超类构造函数  子类非静态代码块  子类非静态代码块
 *  子类构造函数*/

class Base {    
    static {
        System.out.println("父类静态块");//(1)
    }
    {
        System.out.println("父类块");//(3)
    }

    public Base() {
        System.out.println("父类构造方法");//(4)
    }
    
    public static void A() {
        int a;//静态方法中不能有静态常量,因为static方法共享一块内存区域,主要用于累加,如果静态常量的常量话就不能累加了,就冲突了
        System.out.println("父类普通静态方法");
    }
    
}

public class Derived extends Base {
    static int a=1;    
    static int b=2;
    static {
        System.out.println("子类静态块");//(2)
    }
    {
        System.out.println("子类块");//(5)
    }

    public Derived() {
        System.out.println("子类构造器");//(6)
    }

    public static void main(String[] args) {    
        Base.A();        
        new Derived();
        
    }
}
/*
 *public static void main(String[] args) {        
        new Derived();
        Base.A();        
    }
父类静态块
子类静态块
父类块
父类构造方法
子类块
子类构造器
父类普通静态方法
*/

/*
 *public static void main(String[] args) {    
        Base.A();        
        new Derived();
        
    }
 父类静态块
子类静态块
父类普通静态方法
父类块
父类构造方法
子类块
子类构造器
 * */

 

      

java程序初始化顺序

标签:ack   静态代码块   类静态变量   父类   print   函数   void   ora   静态   

原文地址:https://www.cnblogs.com/shijinglu2018/p/9320772.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!