前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >java 构造函数是如何执行的「建议收藏」

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

作者头像
全栈程序员站长
发布于 2022-09-15 00:51:00
发布于 2022-09-15 00:51:00
8880
举报

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

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年7月8,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
java面试| 精选基础题(3)
答:不正确,编译无法通过。3.4是双精度数,将双精度型(double)赋值给浮点型(float)属于下转型(down-casting,也称为窄化)会造成精度损失,因此需要强制类型转换float f =(float)3.4; 或者写成float f =3.4F;。(相关阅读:java"小心机"(1)【资源彩蛋!】第4点类型转换)
KEN DO EVERTHING
2019/01/17
6810
静态代码块、非静态代码块、构造函数三者执行顺序
主要探讨一下关于静态代码块,非静态代码块,构造函数的执行顺序。 如有错误,欢迎指出。
HaC
2020/12/30
5120
Java面向对象三大特性
利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体。 数据被保护在抽象数据类型的内部,尽可能地隐藏内部的细节, 只保留一些对外接口使之与外部发生联系。用户无需知道对象内部的细节, 但可以通过对象对外提供的接口来访问该对象。
李红
2019/06/06
4310
Java面向对象三大特性
JAVA Calendar方法详解「建议收藏」
究竟什么是一个 Calendar 呢?中文的翻译就是日历,那我们立刻可以想到我们生活中有阳(公)历、阴(农)历之分。它们的区别在哪呢?
全栈程序员站长
2022/09/05
5340
Java面试题总结
自增变量 主要是对 i++ 和 ++i 的理解 public class Test01 { public static void main(String[] args) { // 变量自增 i++ ++i的理解 int i = 1; i = i++; // int j = i++; int k = i + ++i * i++; System.out.println("i=" + i);
shaoshaossm
2022/12/27
2910
Java面试题总结
【面向对象编程】继承
在编程中,继承可以实现代码的复用,减少重复编写代码的工作量。通过继承,子类可以继承父类的属性和方法,并且可以根据需要进行扩展和修改,提高了代码的可维护性和可扩展性。再例如现实世界的复杂性,但事物之间存在某种共性,那么程序设计就需要考虑
用户11288949
2024/09/24
870
【面向对象编程】继承
Java基础(十):关键字static、代码块、关键字final
冬天vs不冷
2025/01/21
1370
Java基础(十):关键字static、代码块、关键字final
Java关键词总结
final修饰可以保证安全性,比如数组的长度属性,String类,这些都是final修饰的,保证不可变
闲花手札
2021/08/24
3070
Java基础-08(01)总结帮助文档,代码块,继承
1:如何制作帮助文档(了解) (1)写一个类 (2)加入文档注释 (3)通过javadoc工具生成即可 javadoc -d 目录 -author -version ArrayTool.jav
Java帮帮
2018/03/15
8330
Java基础-08(01)总结帮助文档,代码块,继承
java几大特性_java三大特性是什么?「建议收藏」
java三大特性:1、封装,是指隐藏对象的属性和实现细节,仅对外提供公共访问方式;2、继承,从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力;3、多态,一个方法可以有多种实现版本,即“一种定义, 多种实现”。
全栈程序员站长
2022/07/18
2.9K0
java几大特性_java三大特性是什么?「建议收藏」
JAVA零基础小白学习教程之day09-内部类&权限&final&静态
是内部类的简化写法。它的本质是一个带具体实现的 父类或者父接口的 匿名的 子类对象。
张哥编程
2024/12/13
1390
JAVA零基础小白学习教程之day09-内部类&权限&final&静态
Java异常详解及如何处理
作者:lulipro 来源:www.cnblogs.com/lulipro 简介 程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常。异常发生时,是任程序自生自灭,立刻退出终止,还是输出错误给用户?或者用C语言风格:用函数返回值作为执行状态?。 Java提供了更加优秀的解决办法:异常处理机制。 异常处理机制能让程序在异常发生时,按照代码的预先设定的异常处理逻辑,针对性地处理异常,让程序尽最大可能恢复正常并继续执行,且保持代码的清晰。 Java中的异常可以是函数中的语句执行
Tanyboye
2018/07/02
1.3K0
java类加载常见的几种问题理解类加载机制
类加载过程中的相关概念详见- http://m.myexception.cn/program/1602930.html http://www.codeceo.com/article/java-class-loader-learn.html http://blog.csdn.net/ns_code/article/details/17881581 理解类加载过程的5步。 Round1: 首先请理解如下代码:
全栈程序员站长
2022/08/27
4650
面试题丨Java的类/实例初始化过程
昨天看到群里面有人分享了一道题目,我答错了,于是趁机了解了下Java的类/对象初始化过程:
本人秃顶程序员
2019/05/13
9800
面试题丨Java的类/实例初始化过程
java中带继承类的加载顺序详解及实战
  在面试中,在java基础方面,类的加载顺序经常被问及,很多时候我们是搞不清楚到底类的加载顺序是怎么样的,那么今天我们就来看看带有继承的类的加载顺序到底是怎么一回事?在此记下也方便以后复习巩固!
阿豪聊干货
2018/08/09
4770
java中带继承类的加载顺序详解及实战
Java类实例化时执行顺序
samRsa
2025/02/24
400
两道面试题,带你解析Java类加载机制
在许多Java面试中,我们经常会看到关于Java类加载机制的考察,例如下面这道题:
陈树义
2018/08/01
2600
Java 静态块、构造块、构造函数执行顺序
1.静态块:用static声明,JVM加载类时执行,仅执行一次 2.构造块:类中直接用{}定义,每次创建对象时执行 3.执行顺序优先级:静态块>main()>构造块>构造方法 4.静态块和静态属性优先执行,谁在前先执行谁。
pydata
2018/08/02
1.8K0
static静态代码块加载和执行
静态代码块,非静态代码块,无参构造,有参构造,这些代码片段分别在什么时候加载执行?
IT云清
2019/01/22
5910
【进收藏夹吃灰系列】——Java基础快速扫盲
本文主要包括Java入门的一些知识,包括JDK环境安装,常用语法以及面向对象编程等。
Noneplus
2020/07/16
3830
相关推荐
java面试| 精选基础题(3)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档