zoukankan      html  css  js  c++  java
  • Java初始化顺序

    Java初始化顺序

    普通类初始化

     1 package com.fwj.init;
     2 
     3 public class Sample {
     4 
     5     Sample(String s){
     6           System.out.println(s);
     7     }
     8     Sample(){
     9           System.out.println("Sample默认构造函数被调用");
    10     }
    11 }
     1 package com.fwj.init;
     2 
     3 public class Test {
     4     static Sample sam=new Sample("静态成员sam初始化");
     5     Sample sam1=new Sample("sam1成员初始化");
     6     static{
     7           System.out.println("static块执行");
     8 
     9           if(sam==null)System.out.println("sam is null");
    10 
    11           sam=new Sample("静态块内初始化sam成员变量");
    12 
    13           }
    14     Test(){
    15           System.out.println("Test默认构造函数被调用");
    16     }
    17     public static void main(String[] args) {
    18         new Test();
    19     }
    20 }

    运行结果:

    静态成员sam初始化
    static块执行
    静态块内初始化sam成员变量
    sam1成员初始化
    Test默认构造函数被调用

    结论:

    1、静态成员首先初始化

    2、普通成员初始化

    3、构造函数初始化

    对于静态成员之间和普通成员之间的初始化顺序,之和他们的定义顺序有关:

     1 package com.fwj.init;
     2 
     3 public class Test {
     4     static{
     5         System.out.println("static 块 1  执行");
     6         }
     7   static Sample staticSam1=new Sample("静态成员staticSam1初始化");
     8   Sample sam1=new Sample("sam1成员初始化");
     9   static Sample staticSam2=new Sample("静态成员staticSam2初始化");
    10   static{
    11         System.out.println("static 块 2  执行");
    12 
    13         }
    14   Test(){
    15         System.out.println("Test默认构造函数被调用");
    16   }
    17   Sample sam2=new Sample("sam2成员初始化");
    18   
    19   public static void main(String[] args) {
    20         new Test();
    21   }
    22 }

    执行结果:

    static 块 1  执行
    静态成员staticSam1初始化
    静态成员staticSam2初始化
    static 块 2  执行
    sam1成员初始化
    sam2成员初始化
    Test默认构造函数被调用

    Java继承情况下的初始化顺序

     1 package com.fwj.init;
     2 
     3 public class Test {
     4     static {
     5         System.out.println("父类static 块 1  执行");
     6     }
     7 
     8     static Sample staticSam1 = new Sample("父类 静态成员staticSam1初始化");
     9     Sample sam1 = new Sample("父类 sam1成员初始化");
    10     static Sample staticSam2 = new Sample("父类 静态成员staticSam2初始化");
    11     
    12     static {
    13         System.out.println("父类 static 块 2  执行");
    14 
    15     }
    16 
    17     Test(){
    18         System.out.println("父类 Test默认构造函数被调用");
    19     }
    20     Sample sam2 = new Sample("父类 sam2成员初始化");
    21 }
     1 package com.fwj.init;
     2 
     3 public class TestSub extends Test {
     4 
     5     static Sample staticSamSub = new Sample("子类 静态成员staticSamSub初始化");
     6 
     7     TestSub()
     8     {
     9         System.out.println("子类 TestSub 默认构造函数被调用");
    10     }
    11 
    12     Sample sam1 = new Sample("子类 sam1成员初始化");
    13     static Sample staticSamSub1 = new Sample("子类 静态成员staticSamSub1初始化");
    14     
    15     static {
    16         System.out.println("子类 static 块  执行");
    17     }
    18     
    19     Sample sam2 = new Sample("子类 sam2成员初始化");
    20 
    21     public static void main(String[] args) {
    22         new TestSub();
    23     }
    24 
    25 }

    运行结果:

    父类static 块 1  执行
    父类 静态成员staticSam1初始化
    父类 静态成员staticSam2初始化
    父类 static 块 2  执行
    子类 静态成员staticSamSub初始化
    子类 静态成员staticSamSub1初始化
    子类 static 块  执行
    父类 sam1成员初始化
    父类 sam2成员初始化
    父类 Test默认构造函数被调用
    子类 sam1成员初始化
    子类 sam2成员初始化
    子类 TestSub 默认构造函数被调用

    结论:

    1、继承体系的所有静态成员初始化,先父类,后子类。

    2、父类完成初始化,普通成员初始化---》构造方法初始化

    3、子类完成初始化,普通成员初始化---》构造方法初始化

    引用:http://www.cnblogs.com/miniwiki/archive/2011/03/25/1995615.html

  • 相关阅读:
    超定方程组
    单应矩阵
    Flexible Camera Calibration By Viewing a Plane From Unknown Orientations
    解 Ax = 0
    PVANET: Deep but Lightweight Neural Networks for Real-time Object Detection
    图像处理库
    visdom 简单使用
    STN(Spatial Transformer Networks)
    Distilling the Knowledge in a Neural Network
    记一次前端中国标准时间转换为yyyy-MM-dd类型
  • 原文地址:https://www.cnblogs.com/mingluosunshan/p/3222444.html
Copyright © 2011-2022 走看看