目录

初始化块的语法

静态类的初始化


初始化块的语法

[修饰符] {//可执行语句}

【注意】修饰符只能出现static

  1. 有static,说明它是类初始化块/静态初始化块
  2. 没有static,说明它是实例初始化块/非静态初始化块
  3. 由于初始化块没有名字,所以他只能被“隐式”执行

【将初始化代码提取成初始化块】

【一些细节】

  1. 实例初始化到底何时会被执行?

    1. 实例初始化块代码,会在【每次调用构造器之前】被隐式执行
    2. 规则:【位于构造器前面】的、而且【无需传入参数】的代码就可被提取到初始化块中
    3. 实例初始化块和构造器的作用几乎相同,但实例初始化块的优先级更高
    4. 实例初始化块包含的代码,总是在构造器包含的代码之前执行
  2. Java允许提供多个实例初始化块,至少目前为止没有发现多个实例初始化块的价值。所以不如合并为一个。
  3. JDK编译器会把【实例初始化块的代码】,【声明field时候指定初始值的代码】都提取到构造器的“最前面”
  4. 【实例初始化块的代码】与
  5. 【声明field时候指定初始值的代码】按它们在源代码中顺序执行

public class Person {//下面定义一个初始化块{int a=6;if(a>4) {System.out.println("Person初始化块:局部变量a的值大于4");}System.out.println("Person的初始化块");}//定义第二个初始化块{System.out.println("Person的第二个初始化块");}//定义无参数构造器public Person() {System.out.println("Person类的无参数构造器");}public static void main(String[] args) {new Person();}
}

输出结果:优先执行初始化块,多个初始化块之间按顺序执行下去,然后开始初始化实例,从初始化构造器开始

===========================================================================

静态类的初始化

类初始化:当程序第一次【主动】使用该类就会初始化该类。下面几种情况会初始化该类:

  1. 访问了该静态field或静态方法
  2. 初始化了该类的子类 —— 因为Java初始化一个类,永远先从顶层父类(object)开始初始化
  3. 使用反射来Class.ForName(类名字符串)
  4. 如果该类作为主类使用(有main方法,而且程序确实从该main方法开始执行)
  5. 典型的,使用类来声明变量,并不算使用该类
class Root{//类初始化块static {System.out.println("Root的静态初始化块");}{System.out.println("Root的普通初始化块");}public Root() {System.out.println("Root的无参数构造器");}
}class Mid extends Root{static {System.out.println("Mid的静态初始化块");}{System.out.println("Mid的普通初始化块");}public Mid() {System.out.println("Mid的无参数构造器");}public Mid(String msg) {//通过this调用同一类中重载构造器this();System.out.println("Mid的带参数构造器,其参数值:"+msg);}
}class Leaf extends Mid{static {System.out.println("Leaf的静态初始化块");}{System.out.println("Leaf的普通初始化块");}public Leaf() {//调用父类的一个字符串构造器super("Java笔记");System.out.println("执行Leaf的构造器");}
}
public class Test {public static void main(String[] args) {new Leaf();new Leaf();}
}

【代码分析】执行流程为:静态初始化块(静态初始化块仅初始化【一次】) → 按类的继承等级从上到下运行初始化块

运行结果:

【Java】 5.9 初始化块相关推荐

  1. java 静态块初始化_简单了解java中静态初始化块的执行顺序

    这篇文章主要介绍了简单了解java中静态初始化块的执行顺序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在java中,其应该是先于所有的方法执行. ...

  2. 浅谈 JAVA中静态初始化块和非静态初始化块的区别

    众所周知在JAVA编程语言中有两种初始化块: 静态初始化块 非静态初始化块 他们到底有什么区别呢?今天就浅谈一下JAVA中静态初始化块和非静态初始化块的区别 静态初始化块 定义: static{} 执 ...

  3. java面向对象-------静态初始化块

    1.构造方法用于对象的初始化!静态初始化块,用于类的初始化操作,在静态初始化块中不能直接访问非static成员. package java面向对象; /** * 测试静态初始化块 */public c ...

  4. java里的初始化块_[转载] Java 语言中的实例初始化块 ( IIB) 详解

    参考链接: Java中的实例初始化块(IIB) 在 Java 语言中的类初始化块 文章中我们简单的介绍了下 Java 中的实例初始化块 ( IIB ).不过我觉得介绍的有点简单了,于是,再写一篇文章详 ...

  5. 关于Java的静态初始化块

    这里我们主要讨论下静态初始化块这种情况. 静态初始化块是在类被加载的时候就执行的一块程序,并且一直存在直到程序关闭.也就是说当程序被执行,即classloader将该java程序编译后的class文件 ...

  6. JAVA抽象类接口初始化块实验_抽象类和接口 - 逝水无痕7777的个人空间 - OSCHINA - 中文开源技术交流社区...

    抽象类和接口 1.抽象类 抽象方法是只有方法签名,没有方法实现的方法.有抽象方法的类只能被定义成抽象类,抽象类可以没有抽象方法.抽象方法和抽象类必须使用abstract修饰符来定义. 抽象类不能被实例 ...

  7. 零基础Java学习之初始化块

    初始化块 初始化块是类的五大成员之一,其包括类初始化块和实例初始化块 类初始化块 静态代码块 语法格式: [修饰符] class 类名{static{静态代码块语句;} } 位置:在类中方法外,一个类 ...

  8. 什么是Java实例初始化块

    在本篇文章,我将会使用一个例子展示什么是实例变量初始化块,实例初始化块和静态初始化块,然后说明在Java中实例初始化块是如何工作的. 执行顺序 查看下面的代码,你知道哪个先执行吗? package s ...

  9. java静态/动态成员变量、初始化块,父类/子类构造函数执行顺序问题

    2019独角兽企业重金招聘Python工程师标准>>> /* * 几大原则 * 一.静态成员变量(Static) * 1.静态成员变量为类变量,所有对象共享同一内存空间 * 2.静态 ...

  10. Java的知识点10——static关键字、静态初始化块、 参数传值机制、包、导入类import、 静态导入

    static 关键字 在类中,用static声明的成员变量为静态成员变量,也称为类变量. 类变量的生命周期和类相同,在整个应用程序执行期间都有效.它有如下特点: 1. 为该类的公用变量,属于类,被该类 ...

最新文章

  1. c语言aba字母塔,打印字母金字塔,昨晚看到某个帖子的题目
  2. 反弹和补遗:再论Bjarne Stroustrup的基于对象的含义
  3. C#开发学习——内联表达式
  4. linux工科软件,linux基础网络工具学习笔记
  5. 二进制文件后缀_ZSY2018综合录井仪的数据流与数据文件
  6. javaweb学习总结(五):Servlet开发(一)
  7. c语言中x的n次方怎么表示_线性代数的本质及其在AI中的应用
  8. 推荐系统(1)-概述
  9. mysql的使用优化问题吗_如何对 mysql 进行优化的问题
  10. python遗传算法工具箱的使用_Python遗传算法框架——Geatpy学习笔记(一)
  11. Android TV 焦点控制
  12. 旅游新纪元紫山缭绕,静思生活
  13. 不熟悉 excel,使用 python 将数据按要求转置
  14. 辨析NOR FLASH地址左右移的问题
  15. Modeling Conversation Structure and Temporal Dynamics for Jointly Predicting Rumor Stance and Veraci
  16. H5电玩城源码+玩法比较多+UI也特别好看+纯源码系列
  17. 语句摘抄——第25周
  18. DeFi明斯基时刻:压力测试与启示
  19. 简析BlockingQueue
  20. vs编写java_vs code编写java

热门文章

  1. WinCE 系统刚启动时运行应用,在应用启动时偶尔出现异常
  2. 自定义Dictionary支持线程安全
  3. 11.05 scrum report
  4. Asp.Net 2.0中的客户端脚本
  5. TSM12M触摸芯片注意事项
  6. C++ Primer 5th笔记(chap 17 标准库特殊设施)流随机访问
  7. (chap4 Http状态码) 4XX
  8. [力扣leetcode319]灯泡问题
  9. [密码学] 消息认证码构造方法
  10. 关于“ModuleNotFoundError: No module named ‘flask._compat‘”的解决