zoukankan      html  css  js  c++  java
  • 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初始化块-->初始化父类实例成员变量(如果有赋值语句),执行父类普通初始化块-->父类构造方法-->初始化子类实例成员变量(如果有赋值语句)及普通初始化块-->子类构造方法。

  • 相关阅读:
    (一)Kubernetes 系统基础
    Linux-网络RAID技术DRBD
    Linux-存储服务之NFS
    ELK快速入门(五)配置nginx代理kibana
    ELK快速入门(四)filebeat替代logstash收集日志
    ELK快速入门(三)logstash收集日志写入redis
    渗透测试工具集合
    CVE-2019-0708(非蓝屏poc)远程桌面代码执行漏洞复现
    代码审计-thinkphp3.2.3框架漏洞sql注入
    渗透测试-端口复用正向后门
  • 原文地址:https://www.cnblogs.com/xiarongjin/p/8306690.html
Copyright © 2011-2022 走看看