zoukankan      html  css  js  c++  java
  • java 构造函数是如何执行的

    1.构造函数不是方法!!

       原因1:方法的话,会直接执行方法体内的代码,但是构造函数首先执行的不是{}里的代码块,而是给对象的成员初始化;

                2.方法可以被调用其他方法调用,但是构造函数不能被方法或变量调用。

      package com.statics.www;
    public class Son {
    //构造函数执行第二步:
    private int num2=1*cal2();

    //构造函数执行第一步:
    public static int num1=1*cal1();

    //构造函数第0步:
    public static int cal1(){
    System.out.println("构造函数第一步:静态变量赋值!");
    return 1;
    }

    public static int cal2(){
    System.out.println("构造函数第二步:非静态全局变量赋值");
    return 2;

    }

    {
    System.out.println("构造函数第三步:代码块!");
    }

    public Son(){
    System.out.println("构造函数第四步:执行构造函数内部代码块!");
    }

    }

    执行结果为:



    2. 从上面测试得出结论:

    构造函数初始化对象时,执行的顺序是  

    0.方法优先存在于任何变量或者对象,存在于类中,而不是对象中。即构造对象前,方法就存在。

    第一步. 静态变量赋值

    第二步.代码块或者全局变量,(执行顺序由代码位置决定,如果代码块在前,优先执行代码块;如果变量在前,优先变量赋值)

    第三步.执行构造函数内部代码



    3.继承中的构造函数执行顺序:

         0.子类重写了父类的方法;

         1.调用父类构造函数();

          2.调用子类构造函数();

    父类代码:

    package com.statics.www;


    public class Father {
    private int num=1;
    public Father(){
    System.out.println("构造father,接下来调用Test()");
    Test();
    }

    public void Test(){
    System.out.println("调用Father被重写的方法Test(),现在的Num值是"+num);
    }

    }

    子类代码:

    package com.statics.www;

    public class Son extends Father {

    private int num=1;
    public Son(){
    System.out.println("执行Son构造函数内部代码块!");
    }

    public void Test(){
    System.out.println("调用Son被重写的方法Test(),现在的Num值是"+num);
    }

    }



    可以看出被调用的Test()方法是子类的Test(),另外特别注意Num   =0!!!!!!因为父类的num 是private的不能继承,但是子类的num还没有被赋值(要等到父类构造完成,才能构造子类),所以默认是0

        

       

  • 相关阅读:
    Mysql DQL语言执行顺序
    MySQL核心技术——DQL语言
    Java基础第二十九天总结——Java8新特性
    Java基础第二十八天总结——反射机制
    在对csv文件做批量获取时无法获取,程序不动
    tensorflow 对csv数据进行批量获取
    tensorflow 做多元线性回归时怎样对非数据型数据(分类型数据)进行处理(编码)
    flatten函数
    用 sklearn包中的 linear_model 实现多元线性回归
    tensorflow实现多元线性回归时预测出的参数为nan
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3202919.html
Copyright © 2011-2022 走看看