• Java中构造函数执行顺序的问题


    1,  先执行内部静态对象的构造函数,如果有多个按定义的先后顺序执行;而且静态类的构造函数只会被执行一次,只在其第一个对象创建时调用,即便是创建了同一个类的多个对象,例如main()函数里b1,b2创建了同一个类的两个对象,但是grandmaMotherClass的构造函数只被执行了一次

    2,  再执行父类的构造函数(c++中如果有多个,可按照左右先后顺序执行)

    3,  再执行内部普通对象的构造函数

    4,  最后执行该类本身的构造函数

    class grandpaClass{ //
    
        public grandpaClass(){
    
           System.out.println("1912年 爷爷 出生了");
    
        }
    
    }
    
     
    
    class fatherClass extends grandpaClass{
    
        public fatherClass(){
    
           System.out.println("1956年 爸爸 出生了");
    
        }
    
    }
    
     
    
    class grandmaMotherClass{
    
        public grandmaMotherClass(){
    
           System.out.println("奶奶的妈妈 是 1890年出生的");
    
        }
    
    }
    
     
    
    class gandmaClass{
    
        static int year = 0;
    
        static grandmaMotherClassnnmm = new grandmaMotherClass();
    
        public gandmaClass(){
    
           year = 1911;
    
           System.out.println(year + "年 奶奶 出生了");
    
        }
    
       
    
        public gandmaClass(int count){
    
           year += count;
    
           System.out.println(year + "年 奶奶的妹妹 出生了");
    
        }
    
    }
    
     
    
    class motherClass{
    
        public motherClass(){
    
           System.out.println("1957年 妈妈 出生了");
    
        }
    
    }
    
     
    
    public class javaclass extends fatherClass{
        /**
    
         * @param args
    
         */
    
        motherClass b = new motherClass();;
    
        static gandmaClass b1 = new gandmaClass();
    
        static gandmaClass b2 = new gandmaClass(2);
    
        public javaclass(){
    
           System.out.println("1981年 我 出生了");
    
        }
    
        public static void main(String[] args) {
    
           // TODO Auto-generatedmethod stub
    
           System.out.println("mainfunction is called");
    
           javaclass my = new javaclass();
        }
    
    }
    执行结果如下:
    
    奶奶的妈妈 是 1890年出生的
    1911年 奶奶 出生了
    1913年 奶奶的妹妹 出生了
    main function is called
    1912年 爷爷 出生了
    1956年 爸爸 出生了
    1957年 妈妈 出生了
    1981年 我 出生了
  • 相关阅读:
    C#中一行代码实现18位数字时间戳转换为DateTime
    Java,Python,前端,Linux,公众号等5T编程资源整理免费下载
    Winform中使用FastReport的DesignReport时怎样给通过代码Table添加数据
    一、渐变边框
    一、Dev单元格
    一、Dev
    一、
    三、数据-1
    三、接口数据格式-2
    二、GitLab使用
  • 原文地址:https://www.cnblogs.com/hdk1993/p/4867303.html
Copyright © 2020-2023  润新知