java 构造函数是如何执行的「建议收藏」

java 构造函数是如何执行的「建议收藏」1.构造函数不是方法!!  原因1:方法的话,会直接执行方法体内的代码,但是构造函数首先执行的不是{}里的代码块,而是给对象的成员初始化;      2.方法可以被调用其他方法调用,但是构造函数不能被方法或变量调用。  packagecom.statics.www;publicclassSon{//构造函数执行第二步:privateintnum2=

大家好,又见面了,我是你们的朋友全栈君。

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(“构造函数第四步:执行构造函数内部代码块!”);
}

}

执行结果为:

java 构造函数是如何执行的「建议收藏」

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);
}

}

java 构造函数是如何执行的「建议收藏」

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

    

   

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/156916.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Java的输入输出语句_c语言有没有输入输出语句

    Java的输入输出语句_c语言有没有输入输出语句一、概述  输入输出可以说是计算机的基本功能。作为一种语言体系,java中主要按照流(stream)的模式来实现。其中数据的流向是按照计算机的方向确定的,流入计算机的数据流叫做输入流(inputStream),由计算机发出的数据流叫做输出流(outputStream)。Java语言体系中,对数据流的主要操作都封装在java.io包中,通过java.io包中的类可以实现计算机对数据的输入、输出操作…

    2022年4月19日
    34
  • 无线充qi协议c语言详解,无线充电Qi协议正向通信FSK的解调设计[通俗易懂]

    无线充qi协议c语言详解,无线充电Qi协议正向通信FSK的解调设计[通俗易懂]白光磊池卿华王兆俊江昊史佳雯周天摘要:无线充电Qi协议提出发射器和接收器通过频率调制(FSK)方式进行正向通信,进而建立完整的通信状态控制。接收器可采用测宽法进行频率解调,然而由于电磁耦合变化、负载变化、载波占空比变化、测量量化等引起的误差,该方法无法满足实际应用的要求。该文针对传统测宽法抗干扰能力弱的问题,提出一种窗口滤波算法,通过参考相邻脉冲频…

    2022年6月16日
    46
  • Python基础教程Hello world

    Python基础教程Hello world

    2021年6月1日
    89
  • 数仓数据分层(ODS DWD DWS ADS)换个角度看

    数仓数据分层(ODS DWD DWS ADS)换个角度看数仓数据分层简介1.背景数仓是什么,其实就是存储数据,体现历史变化的一个数据仓库.因为互联网时代到来,基于数据量的大小,分为了传统数仓和现代数仓.传统数仓,使用传统的关系型数据库进行数据存储,因为关系型数据库本身可以使用SQL以及函数等做数据分析.所以把数据存储和数据分析功能集合为一体,加上一个可视化界面,就能从数据存储,数据分析,数据展示完整方案.到了互联网时代,由于上网用户剧增,特别是移动互联网时代,海量的网络设备,导致了海量的数据产生,企业需要也希望从这些海量数据中挖掘有效信息,如行为

    2022年6月26日
    70
  • java生成指定位数的随机数「建议收藏」

    java生成指定位数的随机数「建议收藏」java生成指定位数的随机数

    2022年4月23日
    207
  • 通用数据库连接程序

    通用数据库连接程序

    2021年8月7日
    62

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号