当前位置: 首页 > news >正文

疯狂Java讲义(十一)---- 初始化块

  •   普通初始化块  

  一个类里可以有多个初始化块,相同类型的初始化块之间有顺序:前面定义的先执行,后面定义的后执行。

  初始化块的修饰符只能是static,使用static修饰的初始化块被称为静态初始化块。

  普通初始化块、声明实例属性指定的默认值都可认为是对象的初始化代码,执行顺序与声明顺序相同。

  当Java创建一个对象时,系统先为该对象的所有实例属性分配内存(前提是该类已经被加载过了),接着程序开始对这些实例属性执行初始化,初始化顺序为:先执行初始化块或声明属性时制定的初始值,再执行构造器里指定的初始值。

  与构造器类似的,创建一个Java对象时,不仅会执行该类的普通初始化块和构造器,系统会一直追溯到Object类,先执行Object类的初始化块,然后是Object的构造器,依次向下执行其父类的初始化块、父类的构造器。。。最后才执行该类的初始化块和构造器,返回该类的对象。

 

  • 静态初始化块

  静态初始化块是类相关的,系统将在类初始化阶段执行静态初始化块,而不是在创建对象时才执行。因此静态初始化块总比普通初始化块要早。而且它只能初始化类属性,不能对实例属性进行初始化。

  系统在类初始化阶段执行静态初始化块时,不仅会执行本类的静态初始化块,还会上溯到Object类,父类的静态初始化块,最后才是该类的静态初始化块,只有当类初始化完成后,才可在系统中使用这个类。

  第一次创建某个类对象时,因为系统中并不存在该类,因此需要先加载并初始化这个类,初始化时会先执行其顶层父类的静态初始化块,然后是直接父类的静态初始化块,最后才执行该类本身的静态初始化块。一旦该类初始化完成后,它就会在虚拟机里一直存在,所以第二次创建对象时无需调用该类的静态初始化块。

  真正开始创建该类对象时,先执行最顶层父类的初始化块、构造器,然后再执行其父类的初始化块、构造器、、、最后才执行该类自己的初始化块、构造器。

  Java系统加载并初始化某个类,总是保证该类所有父类(包括直接父类和间接父类)全部加载并初始化。

转载于:https://www.cnblogs.com/IvySue/p/6298399.html

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlserver.SQLServerDriver
  • javaweb学习总结(三十六)——使用JDBC进行批处理
  • java数据库设计的14个技巧
  • Population Genetics and Demography Unite Ecology and Evolution
  • 三种不同数据库取前10条记录
  • 算法:正面硬币
  • failed to connect session timed out
  • kylin的状态栏(启动器)改成ubuntu之前的样子
  • java页面抓取代码
  • 【bzoj3730】 震波
  • flex分页代码
  • 蒟蒻ACMer回忆录 · 一段弱校ACM的奋斗史
  • 使用java控制UDP协议
  • android中VideoView播放sd卡上面的视频
  • flex小数点四舍五入
  • javascript从右向左截取指定位数字符的3种方法
  • jQuery(一)
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • Linux gpio口使用方法
  • MYSQL 的 IF 函数
  • Python利用正则抓取网页内容保存到本地
  • Terraform入门 - 1. 安装Terraform
  • vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
  • vue-cli在webpack的配置文件探究
  • 安卓应用性能调试和优化经验分享
  • 给Prometheus造假数据的方法
  • 技术:超级实用的电脑小技巧
  • 将回调地狱按在地上摩擦的Promise
  • 解决iview多表头动态更改列元素发生的错误
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • 阿里云服务器购买完整流程
  • 湖北分布式智能数据采集方法有哪些?
  • ​用户画像从0到100的构建思路
  • # 消息中间件 RocketMQ 高级功能和源码分析(七)
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • #nginx配置案例
  • (35)远程识别(又称无人机识别)(二)
  • (C语言)球球大作战
  • (leetcode学习)236. 二叉树的最近公共祖先
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (第一天)包装对象、作用域、创建对象
  • (多级缓存)缓存同步
  • (附源码)python房屋租赁管理系统 毕业设计 745613
  • (十六)、把镜像推送到私有化 Docker 仓库
  • (十一)c52学习之旅-动态数码管
  • (转)编辑寄语:因为爱心,所以美丽
  • .naturalWidth 和naturalHeight属性,
  • .NET Core WebAPI中封装Swagger配置
  • .NET 漏洞分析 | 某ERP系统存在SQL注入
  • .NET 中各种混淆(Obfuscation)的含义、原理、实际效果和不同级别的差异(使用 SmartAssembly)
  • .net和php怎么连接,php和apache之间如何连接
  • .net网站发布-允许更新此预编译站点
  • .w文件怎么转成html文件,使用pandoc进行Word与Markdown文件转化
  • /etc/X11/xorg.conf 文件被误改后进不了图形化界面
  • [ 隧道技术 ] 反弹shell的集中常见方式(四)python反弹shell