首页 技术 正文
技术 2022年11月15日
0 收藏 632 点赞 2,768 浏览 1004 个字

今天我总结了一下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();
}
}

1,在编译Text.java时,先加载了Fu类,因此Fu类的静态代码块首先执行,而后加载Zi类,Zi类的静态代码块执行,这没什么好说的

2,然后创建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(),有的话在其之后执行,最后执行构造方法的方法体

(有理解不对的地方还请大家指点,一起交流探讨)

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,111
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,584
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,431
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,203
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,838
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,922