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. mvc 路由配置

    1.URL模式 路由系统用一组路由来实现它的功能,这些路由共同组成了应用系统URL架构或方案,这种URL架构是应用程序能够识别并能对之做出响应的一组URL,当处理一个输入 请求时,路由系统的工作是将这 ...

  2. VB.NET或C#报错:You must hava a license to use this ActiveX control.

    VB.NET或者C# winform开发时,如果使用了Microsoft Visual Basic 6.0 ActiveX,并动态创建该控件实例,那么程序移植到没有安装Visual Basic 6.0 ...

  3. 最好的前端API备忘单整理

    注:这份表引自The best front-end hacking cheatsheets - all in one place Javascript ES2015 Cheatsheet JavaSc ...

  4. Vue 入门. 如何在HTML代码里面快速使用Vue

    概述 browserify是一个 CommonJS风格的模块管理和打包工具,上一篇我们简单地介绍了Vue.js官方基于browserify构筑的一套开发模板.webpack提供了和browserify ...

  5. DevOps详解

    最近我阅读了很多有关DevOps的文章,其中一些非常有趣,然而一些内容也很欠考虑.貌似很多人越来越坚定地在DevOps与chef.puppet或Docker容器的熟练运用方面划了等号.对此我有不同看法 ...

  6. prometheus — 基于文件的服务发现

    基于文件的服务发现方式不需要依赖其他平台与第三方服务,用户只需将要新的target信息以yaml或json文件格式添加到target文件中 ,prometheus会定期从指定文件中读取target信息 ...

  7. 关于分布式环境下的id生成

    public class IdWorker { //基准时间 public const long Twepoch = 1288834974657L; //机器标识位数 ; //数据标志位数 ; //序 ...

  8. 贪心算法----区间选点问题(POJ1201)

    题目: 题目的大致意思是,给定n个闭区间,并且这个闭区间上的点都是整数,现在要求你使用最少的点来覆盖这些区间并且每个区间的覆盖的点的数量满足输入的要求点覆盖区间的数量. 输入: 第一行输入n,代表n个 ...

  9. TensorFlow.org教程笔记(一)Tensorflow初上手

    本文同时也发布在自建博客地址. 本文翻译自www.tensorflow.org的英文教程. 本文档介绍了TensorFlow编程环境,并向您展示了如何使用Tensorflow解决鸢尾花分类问题. 先决 ...

  10. [Swift]LeetCode33. 搜索旋转排序数组 | Search in Rotated Sorted Array

    Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. (i.e. ...