Java类的初始化顺序

  在开发中,知道Java类的初始化顺序才能让我们更加清楚地掌握程序的执行流程。先把结论贴出来,Java里,从图里的1~6,分别按顺序执行。

  以下为代码验证阶段,一共三个类:基类(Base)、子类(Sub)和工具类(Log,输出日志)。

package com.kobe.practice.order;

public class Sub extends Base {

    public static void main(String[] args) {
Sub sub = new Sub();
} static {
System.out.println("Sub static block 1");
} private static String staticValue = Log.printLog("Sub static Fields"); static {
System.out.println("Sub static block 2");
} {
System.out.println("Sub normal block 1");
} private String value = Log.printLog("Sub normal Fields"); {
System.out.println("Sub normal block 2");
} public Sub() {
System.out.println("Sub constructor");
} } class Base {
static {
System.out.println("Base static block 1");
} private static String staticValue = Log.printLog("Base static Fields"); static {
System.out.println("Base static block 2");
} {
System.out.println("Base normal block 1");
} private String value = Log.printLog("Base normal Fields"); {
System.out.println("Base normal block 2");
} public Base() {
System.out.println("Base constructor");
} } class Log {
public static String printLog(String msg) {
System.out.println(msg);
return null;
}
}

  输出结果:

Base static block 1
Base static Fields
Base static block 2
Sub static block 1
Sub static Fields
Sub static block 2
Base normal block 1
Base normal Fields
Base normal block 2
Base constructor
Sub normal block 1
Sub normal Fields
Sub normal block 2
Sub constructor

  从结果能看出,基类的静态代码块、基类的静态成员变量(优先级相同,根据在代码中的出现顺序执行,且只有在类的一次加载时执行) → 派生类静态代码块,派生类静态成员字段优先级相同,根据在代码中的出现顺序执行,且只有在类的一次加载时执行) → 基类普通代码块,基类普通成员字段(优先级相同,根据在代码中的出现顺序执行) → 基类的构造函数 → 派生类普通代码块,派生类普通成员字段(优先级相同,根据在代码中的出现顺序执行) → 派生类构造函数。

  毫无疑问,Java类的执行顺序十分重要,谨记于心。

图示Java类的初始化顺序的更多相关文章

  1. java类的初始化顺序

    在java中,当我们new一个对象时,对象中的成员,初始化块以及构造方法的加载是有一定的顺序的,看下面一副图: 一.单类(无基类)下的初始化顺序: public class Parent { stat ...

  2. Java类的初始化顺序 (静态变量、静态初始化块、变量、初始...

    很有意思的一篇文章 1.没有继承 静态变量->静态初始化块->变量->变量初始化块->构造方法 2.有继承的情况 父类静态变量->父类静态初始化块->子类静态变量- ...

  3. Java类成员初始化顺序

    类中包含7中成员:1.静态变量 static2.final静态常量 final static3.静态代码块 static{}  //多个代码块顺序执行 4.普通变量5.普通代码块 {}  //多个代码 ...

  4. java 类的初始化顺序

    有父类 1. 父类static成员变量 2. 父类static块 3. 父类非static成员 4. 父类非static块 5. 父类构造方法 子类,也按照1-5顺序执行 无父类 1. static成 ...

  5. Java笔记 #04# 类的初始化顺序补充

    参考java中的类的初始化顺序详解 package org.sample; class Bread { Bread() { System.out.println("Bread()" ...

  6. java创建对象 的初始化顺序

    java创建对象 的初始化顺序 1.初始化块 初始化块通常写在类的构造方法之前,由花括号括起来,通常包含对成员属性进行初始化的语句: 初始化块分为instance初始化块和static初始化块,初始化 ...

  7. Java学习笔记二十三:Java的继承初始化顺序

    Java的继承初始化顺序 当使用继承这个特性时,程序是如何执行的: 继承的初始化顺序 1.初始化父类再初始子类 2.先执行初始化对象中属性,再执行构造方法中的初始化 当使用继承这个特性时,程序是如何执 ...

  8. java类的初始化和构造函数

    本人小白一枚,看java类的初始化的时候好晕的说,我觉着书上尽管说的对.但总认为有些信息没说出来,没说清楚,看了好多文章博客的,如今有些感悟,来小写下总结,也算是为以后再次复习种个好果子. 先摘一下书 ...

  9. C#多态;父类引用指向子类对象;new和override的区别;new、abstract、virtual、override,sealed关键字区别和使用代码示例;c#类的初始化顺序

    关于父类引用指向子类对象 例如: 有以下2个类 public class Father { public int age = 70; public static string name = " ...

随机推荐

  1. svn idea 修改文件,文件不变色

    删除后,重新添加. 我这里是什么也没有选择,选上Subversion后,保存,再修改文件,文件颜色就变了 Settings-->Version Control

  2. ios日期显示NaN

    ios中js通过getMonth()获取到的日期显示NaN,而在其他地方如pc.安卓都是ok的,这是为什么呢,原来这里有个ios的兼容问题,需要将日期中的“-”替换为“/” var time = ne ...

  3. json-server假数据

    1.安装命令(全局安装) npm install json-server -g 2,检查json-server是否安装成功: json-server -h,出现如下图表示安装成功 3.安装成功后,就可 ...

  4. redis消息队列,tp5.0,高并发,抢购

    redis处理抢购,并发,防止超卖,提速 1.商品队列(List列表),goods_list           控制并发,防止超卖 2.订单信息(Hash集合),order_info        ...

  5. Pyinstaller (python打包为exe文件)

    需求分析: python脚本如果在没有安装python的机器上不能运行,所以将脚本打包成exe文件,降低脚本对环境的依赖性,同时运行更加迅速. 当然打包的脚本似乎不是在所有的win平台下都能使用,wi ...

  6. idea导入maven项目,找不到jar包,出现红色波浪线【转】

    参考链接 点击跳转

  7. 算法与数据结构(十一) 平衡二叉树(AVL树)(Swift版)

    今天的博客是在上一篇博客的基础上进行的延伸.上一篇博客我们主要聊了二叉排序树,详情请戳<二叉排序树的查找.插入与删除>.本篇博客我们就在二叉排序树的基础上来聊聊平衡二叉树,也叫AVL树,A ...

  8. kali linux 网络渗透测试学习笔记(一)Nmap工具进行端口扫描

    一.利用Nmap扫描网站服务器的端口开放情况 首先打开我们的kali linux才做系统,再打开其命令行模式,输入:nmap www.csdn.net 如下图所示: 因此,通过这个结果可以表明csdn ...

  9. Java ActiveMQ 讲解(二)Spring ActiveMQ整合+注解消息监听

    对于ActiveMQ消息的发送,原声的api操作繁琐,而且如果不进行二次封装,打开关闭会话以及各种创建操作也是够够的了.那么,Spring提供了一个很方便的去收发消息的框架,spring jms.整合 ...

  10. app性能测试,你需要关注哪些指标?

    app性能测试,你需要关注哪些指标? 一.Android客户端性能测试常见指标: 1.内存 2.CPU 3.流量 4.电量 5.启动速度 6.滑动速度.界面切换速度 7.与服务器交互的网络速度 二.预 ...