静态代码块 构造代码块 构造方法的执行顺序
今天我总结了一下java中静态代码块 构造代码块 构造方法的执行顺序及其注意问题
执行顺序:
静态代码块>构造代码块>构造方法体
首先要知道静态代码块是随着类的加载而加载,而构造代码块和构造方法都是随着对象的创建而加载
当时做了这么一个小案例(想必这个大多数学java的都做过,不知道是否都理解了)
class Fu{static {System.out.println("Fu static code");}{System.out.println("Fu code");}public Fu(){System.out.println("Fu GouZao");}
}class Zi extends Fu{static {System.out.println("Zi static code");}{System.out.println("Zi code");}public Zi(){System.out.println("Zi GouZao");}
}public class Text{public static void main(String[] args) {Zi zi = new Zi();}
}
在编译时,先加载了Fu类,因此Fu类的静态代码块首先执行,而后加载Zi类,Zi类的静态代码块执行,这没什么好说的。
然后创建Zi的对象,大家都知道构造代码块优先于构造方法执行,这时候问题来了,这时应该先看Zi类的构造方法,Zi类里的构造方法里有一句隐式的super()首先被执行,所以找到Fu类的构造方法,而Fu类的构造方法中也有一句隐式的super()执行(调用Object类的构造方法),并没有什么返回结果。
接下来才是在执行Fu类构造方法的方法体前先执行了Fu类的构造代码块(Fu code)。
再执行Fu类构造方法的方法体(也就是Fu GouZao),最后又回到Zi类的构造方法中,这时Zi类的super()已经执行完了,在执行Zi类构造方法的方法体前先执行Zi类的构造代码块(Zi code),再执行Zi类构造方法的方法体(Zi GouZao)。
最后的结果是:
Fu static code
Zi static code
Fu code
Fu GouZao
Zi code
Zi GouZao
不知道大家绕晕了没有,我在这再总结一下:
静态的是与类有关,肯定先加载,而构造代码块执行前要先看构造方法中是否有this()或super(),有的话在其之后执行,最后执行构造方法的方法体。
静态代码块 构造代码块 构造方法的执行顺序相关推荐
- 构造代码块、静态代码块、构造方法的执行顺序
构造代码块.静态代码块.构造方法的执行顺序 牛客网上的一道题目: 通过查询,我写的这道题的解题步骤: package niukewang;/*** @author jxd* @date 2021/8/ ...
- [转载] Java静态代码块/构造代码块/构造函数/静态变量/成员变量(相关示例)
参考链接: Java程序的输出| 构造函数 近期做牛客网的Java开发笔试题,发现这类型的题目较多,很容易混淆,特将相关概念和相关示例整理如下,供大家参考^_^ 1. 静态代码块在类加载时即运行,而且 ...
- java静态代码块、静态方法、静态变量、构造代码块、普通代码块、成员变量执行顺序
package smartt.styy.auth.model.voRsp;public class Test {static {String test5="555";//局部变量t ...
- Static、构造代码块快、构造函数等的执行顺序
前言 今天分享的是关于在程序中代码的执行顺序,零零散散写了很多随记,总结起来蛮费时间的,希望大家给个关注,多多关注新人哈,废话不多说,还是老规矩,代码穿插注释的总结方式. 1.代码执行顺序 /*** ...
- Java中构造函数,静态代码块,构造代码块的执行顺序
静态代码块:用static声明,jvm加载类的时候执行,只执行一次. 构造代码块:由{}定义,每一次创建对象的时候执行. 构造函数:对象一建立就调用相应的构造函数. 静态代码块 1.它是随着类的加载而 ...
- html js页面加载前执行,Javascript代码在页面加载时的执行顺序介绍
一.在HTML中嵌入Javasript的方法 1.直接在Javascript代码放在标记对之间 2.由标记的src属性制定外部的js文件 3.放在事件处理程序中,比如: 点击我 4.作为URL的主体, ...
- Java中构造方法的执行顺序
2019独角兽企业重金招聘Python工程师标准>>> 一.先执行内部静态对象的构造方法,如果有多个按定义的先后顺序执行:静态对象在构造的时候也是也先执行其内部的静态对象. 二.再调 ...
- java 静态代码块和spring @value注解注入执行顺序
https://blog.csdn.net/evo_steven/article/details/86005965
- java加载类时静态代码块、构造代码块、构造方法执行顺序
构造代码块作用:https://blog.csdn.net/hspingcc/article/details/54893853 package com.spring.partise;class A{A ...
最新文章
- loss和accuracy的关系
- SDL及扩展库在ARM-Linux 完整移植
- thinkphp字符截取函数msubstr()
- python url加密_使用base64加密在URL传递(python和php版本)
- android sqlite 示例,android SQLite数据库使用示例
- iphonex如何关机_历时一个月,跨越一千里,我找回了在澳门被偷的iphoneX
- 关于JFace中的向导式对话框(WizardDialog类)
- [IOS]开源库RegexKitLite正则表达式的使用
- 机器学习:用正规方程法求解线性回归
- numpy教程:基本输入输出和文件输入输出Input and output
- linux5.4获取root权限,gcc++漏洞 普通用户获取root权限
- 印象笔记粘贴HTML,VScode下MarkDown如何连接印象笔记
- Android 调试桥 (adb)
- linux+psp+模拟器下载,PSP1.5模拟器全教程+最新版本下载(最终版)
- linux realtek声卡驱动下载,下载:Realtek HD Audio音频驱动2.06版
- html5图标用什么格式转换,ico转png 怎么把ico格式转换成png格式
- android手机误删短信恢复软件,安卓手机重要短信误删了是否可以找回
- DHCP 协议(一)
- No valid crumb was included in the request 问题定位与解决
- imu和mems的差别_MEMS加速度计,磁力计和定向角