• Java 成员初始化顺序


    package com.cwcec.test;
    
    class Fu
    {
        int num = 5;
        //构造代码块
        {
            System.out.println("Fu constructor code..." + num);
            num=6;
        }
        public Fu() {
            System.out.println("Fu constructor ..." + num);
            show();
        }
    
         void show() {
            System.out.println("show ..." + num);
        }
        
    }
    
    class Zi extends Fu
    {
        int num = 9;
        //构造代码块
        {
            System.out.println("Zi constructor code..." + num);
            num = 10;
        }
        public Zi() 
        {
            System.out.println("Zi constructor ..." + num);
        }
        void show()
        {
            System.out.println("show ..." + num);
        }
    }
    
    public class FieldDemo 
    {
        public static void main(String[] args)
        {  
            new Zi();
        }  
      
    } 
    Output:
    Fu constructor code...5
    Fu constructor ...6
    show ...0
    Zi constructor code...9
    Zi constructor ...10
     

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    class Animal
    {
        public String name = "Ti";
        public static int age = 10;
        static
        {
            System.out.println("Animal age : " + age);
            
        }
        public Animal()
        {
            age = 100;
            System.out.println("Animal constructor...");
        }
        
        public void display()
        {
            System.out.println("name: " + name);
        }
        
    }
    
    class Dog extends Animal
    {
    
        public static int size = 20;
        static
        {
            
            System.out.println("Dog size : " + size);
        }
        
        public Dog()
        {
            size = 200;
            System.out.println("Dog constructor...");
        }
    
        public static void sleep() {
            System.out.println("Dog sleep...");
        }
        
    }
    
    public class Single
    {
    
        public static void main(String[] args) {
    
            Dog dog = new Dog();
        }
    }

    总结

    1.执行的大致顺序如下,

      (1) 在一个不存在继承的类中:初始化static变量,执行static初始化快-->初始化普通成员变量(如果有赋值语句),执行普通初始化块-->构造方法

      (2)在一个存在继承的类中:初始化父类static成员变量,运行父类static初始化块-->初始化子类static成员变量,运行子类static初始化块-->初始化父类实例成员变量(如果有赋值语句),执行父类普通初始化块-->父类构造方法-->初始化子类实例成员变量(如果有赋值语句)及普通初始化块-->子类构造方法。

  • 相关阅读:
    Go语言sqlx包
    RocketMQ快速上手 ,用前必看
    Lock wait timeout exceeded; try restarting transaction
    rocket mq 查看消费进度,消息堆积,清除堆积数据命令
    ftp或者共享文件预览图片
    RocketMQ中MessageExt属性
    js实现字符串全角转半角,强制转换为大写
    cf #786 (div3)
    c++ array 用法
    歌唱王国 · 另
  • 原文地址:https://www.cnblogs.com/xiarongjin/p/8306690.html
Copyright © 2020-2023  润新知