Java父类与子类中静态代码块 实例代码块 静态变量 实例变量 构造函数执行顺序
实例化子类时,父类与子类中的静态代码块、实例代码块、静态变量、实例变量、构造函数的执行顺序是怎样的?
代码执行的优先级为:
firest:静态部分
second:实例化过程
详细顺序为:
1.父类静态代码块与父类静态变量(取决于代码书写顺序)
2.子类静态代码块与子类静态变量(取决于代码书写顺序)
3.父类实例变量与父类代码块(取决于代码书写顺序)
4.父类构造函数
5.子类实例变量与父类代码块(取决于代码书写顺序)
6.子类构造函数
在JVM加载完类以后,类在被使用的时候初始化,静态部分只在类初始化的时候执行一次。
测试代码:
- class Father {
- Father() {
- LogUtil.log(System.currentTimeMillis() + " ------ 父类构造函数");
- }
- static {
- LogUtil.log(System.currentTimeMillis() + " ------ 父类静态代码块");
- }
- long x = getTime(" ------ 父类实例变量");
- {
- long time = System.currentTimeMillis();
- LogUtil.log(time + " ------ 父类代码块");
- }
- static long y = getTime(" ------ 父类静态变量");
- static long getTime(String who) {
- long time = System.currentTimeMillis();
- LogUtil.log(time + who);
- return time;
- }
- }
- class Child extends Father {
- Child() {
- LogUtil.log(System.currentTimeMillis() + " ------ 子类构造函数");
- }
- static long y = getTime(" ------ 子类静态变量");
- static {
- LogUtil.log(System.currentTimeMillis() + " ------ 子类静态代码块");
- }
- {
- long time = System.currentTimeMillis();
- LogUtil.log(time + " ------ 子类代码块");
- }
- long x = getTime(" ------ 子类实例变量");
- static long getTime(String who) {
- long time = System.currentTimeMillis();
- LogUtil.log(time + who);
- return time;
- }
- }
调用代码:
- new Thread(new Runnable() {
- @Override
- public void run() {
- new Child();
- LogUtil.log("分隔符 ------ 分隔符");
- new Child();
- }
- }).start();
执行结果:
- 11-03 20:02:03.350 7533-7881/? E/AKADDEMO: 1478174523353 ------ 父类静态代码块
- 11-03 20:02:03.350 7533-7881/? E/AKADDEMO: 1478174523353 ------ 父类静态变量
- 11-03 20:02:03.350 7533-7881/? E/AKADDEMO: 1478174523353 ------ 子类静态变量
- 11-03 20:02:03.350 7533-7881/? E/AKADDEMO: 1478174523353 ------ 子类静态代码块
- 11-03 20:02:03.350 7533-7881/? E/AKADDEMO: 1478174523353 ------ 父类实例变量
- 11-03 20:02:03.350 7533-7881/? E/AKADDEMO: 1478174523353 ------ 父类代码块
- 11-03 20:02:03.350 7533-7881/? E/AKADDEMO: 1478174523353 ------ 父类构造函数
- 11-03 20:02:03.350 7533-7881/? E/AKADDEMO: 1478174523353 ------ 子类代码块
- 11-03 20:02:03.350 7533-7881/? E/AKADDEMO: 1478174523353 ------ 子类实例变量
- 11-03 20:02:03.350 7533-7881/? E/AKADDEMO: 1478174523353 ------ 子类构造函数
- 11-03 20:02:03.350 7533-7881/? E/AKADDEMO: 分隔符 ------ 分隔符
- 11-03 20:02:03.350 7533-7881/? E/AKADDEMO: 1478174523353 ------ 父类实例变量
- 11-03 20:02:03.350 7533-7881/? E/AKADDEMO: 1478174523353 ------ 父类代码块
- 11-03 20:02:03.350 7533-7881/? E/AKADDEMO: 1478174523353 ------ 父类构造函数
- 11-03 20:02:03.350 7533-7881/? E/AKADDEMO: 1478174523354 ------ 子类代码块
- 11-03 20:02:03.350 7533-7881/? E/AKADDEMO: 1478174523354 ------ 子类实例变量
- 11-03 20:02:03.350 7533-7881/? E/AKADDEMO: 1478174523354 ------ 子类构造函数
Java父类与子类中静态代码块 实例代码块 静态变量 实例变量 构造函数执行顺序的更多相关文章
- Java静态代码块、代码块及构造函数执行顺序
根据以下程序进行分析 定义一个父类 package sas.LearnJava; public class ExcuteOrderTest { { System.out.println("我 ...
- C#构造函数、私有构造函数、静态构造函数与构造函数执行顺序
默认构造函数,如果没有为类指定任何构造函数,编译器会自动为类创建一个无参构造函数,用以初始化类的字段:如果为类编写了构造函数,那么编译器就不会再自动生成无参构造函数了.ps.C#不允许用户为结构定义无 ...
- java怎么调用子类中父类被覆盖的方法
public class b { { void show() { System.out.println("b"); } } public class c extends b { v ...
- Java父类与子类方法调用顺序
父类 FatherClass package 父类与子类方法调用顺序; /** * 父类 * @author shundong * */ public class FatherClass { priv ...
- Java 父类和子类
package chapter11; public class GeometricObject1 { private String color="white"; private b ...
- JAVA 父类与子类初始化顺序问题
main方法-->子类对象的初始化语句(new className()语句)--->子类构造[因为继承的缘故,它先不会执行]--->父类构造[这一步先不会执行]--->父类静态 ...
- python的父类和子类中关于继承的不同版本的写法
Python 2.7中的继承 在Python 2.7中,继承语法稍有不同,ElectricCar 类的定义类似于下面这样: class Car(object): def __init__(self, ...
- [Java] 父类和子类拥有同名的成员变量(fields)的情况
首先,需要明确的是,无论是通过casting,还是通过将子类对象的reference赋值给父类变量,都无法改变该reference所指对象的真实类型.但当该reference的类型是父类时,将无法调用 ...
- java父类转子类的一个方法
一般子类可以转父类.但父类转子类就会报cast error. 使用jsonobject 思想:先把父类转jsonstring 再把jsonstring转子类.剩余的子类值可以设定进去. import ...
随机推荐
- 【LoadRunner】对摘要认证的处理
近期项目中,进行http协议的接口性能测试过程中,需要进行登录接口的摘要认证,分享一下测试经验. 测试准备 测试工具:LoadRunner11 测试类型:接口测试--某系统登录接口 步骤 根据系统接口 ...
- 最好用的远程连接工具TeamviWer13安装教程(Win10环境)
1.Teamviwer官网:https://www.teamviewer.com/zhCN/ 2.下载链接:https://dl.tvcdn.de/download/TeamViewer_Setup. ...
- Solr linux安装
1.下载安装(自行官网下载) 2.解压安装包 3.进入解压后的bin目录执行命令: ./solr start 出现如下警告: 根据提示修改solr.in.sh中的SOLR_ULIMIT_CHECKS属 ...
- SQL Server2012使用导入和导出向导时,用sql语句作为数据源,出现数据源类型会变成202或者203
用MS SqlServer2012进行数据导出时,使用的查询语句导出,但是出现了错误: “发现 xx个未知的列类型转换您只能保存此包“ 点击列查看详细错误信息时,可以看到: [源信息]源位置: 192 ...
- BZOJ2141&洛谷1975 排队 【线段树套treap】
题目 排排坐,吃果果,生果甜嗦嗦,大家笑呵呵.你一个,我一个,大的分给你,小的留给我,吃完果果唱支歌,大家乐和和. 红星幼儿园的小朋友们排起了长长地队伍,准备吃果果.不过因为小朋友们的身高有所区别,排 ...
- Java项目性能监控和调优工具-Javamelody的学习总结
1.简介: JavaMelody能够在运行环境监测Java或Java EE应用程序服务器.并以图表的形式显示:Java内存和Java CPU使用情况,用户Session数量,JDBC连接数,和http ...
- 【最大流】hihocoder 1369 : 网络流一·Ford-Fulkerson算法
http://hihocoder.com/problemset/problem/1369?sid=1328132 参考 https://blog.csdn.net/a1799342217/articl ...
- 替换/重制Homebrew源
homebrew主要分两部分:git repo(位于GitHub)和二进制bottles(位于bintray),这两者在国内访问都不太顺畅.可以替换成国内的镜像,git repo国内镜像就比较多了,可 ...
- nutch2.x在eclipse+windows环境下运行遇到的一些问题的解决方案
1.问题 permission /tmp/hadoop.... 解决方法:下载hadoop源码包,修改org.apache.hadoop.fs.FileUtil.java文件中方法checkRetur ...
- rpm包安装mysql5.6.*版本
1.查看是否已经安装Mysql rpm -qa | grep -i mysql #删除已经安装的Mysql程序 rpm -ev *****.rpm 2.检查是否还有残留mysql文件夹 find / ...