前言

普通代码块:在方法或语句中出现的{},就被称为代码块

静态代码块:静态代码块有且仅加载一次,也就是在这个类被加载至内存的时候

普通代码块和一般语句执行顺序由他们在代码中出现的次序决定,先出现先执行

代码一

/**

对于上述方法,我们一下就能看出它的输出结果

普通代码块中的变量X=11
普通代码块中的变量y=13
主方法中的变量x=12

代码二

而对于下面的代码,我们调用了类的初始化,同时在类里也写了两个代码块

/**

这里需要谈的就是,类加载机制了,因为我们都知道,当我们实例化一个类的时候

new CodeBlock02();

启动调用的就是这个类的构造方法,但是比构造方法更上一级的是跟本构造方法在同一个类的代码块,因此

代码块的优先级比构造方法高
构造代码块在每次创建对象的时候都会被调用,并且构造代码块的执行次序优先于构造方法

代码三

/**

输出结果

CodeBlock03的静态代码块33333
我是主类======
Code的静态代码块33333
Code的构造代码块22222
Code的构造方法1111
======
Code的构造代码块22222
Code的构造方法1111
======
CodeBlock03的构造代码块22222
CodeBlock03的构造方法33333

从上面的结果可以看出,但这个类被加载到内存的时候,首先需要执行的是静态方法,也就是static方法在类被实例化之前,就已经完成了,和以后的实例化都没有关系了,因此我们能够看到,被第一个输出,同时静态代码块有且仅加载一次,但我们需要运行main方法的时候,就需要等CodeBlock03加载好,因此能够看到下面的输出了

CodeBlock03的静态代码块33333

同时但我们实例化 Code类的时候,这个类也会首先被加载到内存中,然后也是首先运行静态代码块

Code的静态代码块33333

再次实例化的时候,因此该类已经在内存中,所以不再运行静态代码块了

Code的构造代码块22222
Code的构造方法1111

最后在实例化CodeBlock03,因为CodeBlock03也已经被加载内存中

CodeBlock03的构造代码块22222
CodeBlock03的构造方法33333

代码四

/**

输出结果

我是主类======
我是父亲静态代码块
我是儿子静态代码块
我是父亲代码块
我是父亲构造
我是儿子代码块
我是儿子构造
======
我是父亲代码块
我是父亲构造
我是儿子代码块
我是儿子构造
======
我是父亲代码块
我是父亲构造

任何一个类被加载,必须加载这个类的静态代码块

同时如果存在父子关系的时候,调用子类的构造方法,同时子类的构造方法,在最顶部会调用super()也就是父类的构造方法,一般这个是被省略的

public 

所以在子类初始化之前,还需要调用父类构造,所以父类需要加载进内存,也就是从父到子,静态执行,并且只加载一次

我是父亲静态代码块
我是儿子静态代码块

然后父类在进行实例化,在调用构造方法之前,需要调用本类的代码块

我是父亲代码块 我是父亲构造

最后父类初始化成功后,在调用子类的

我是儿子代码块
我是儿子构造

在执行第二次的 new Son()的时候,因为该类已经被装载在内存中了,因此静态代码块不需要执行,我们只需要从父到子执行即可

我是父亲代码块
我是父亲构造
我是儿子代码块
我是儿子构造

同理在执行new Father()的时候也是一样的,只需要执行Father的实例化

我是父亲代码块
我是父亲构造


原作者:轻狂书生FS
原文链接:关于Java你不知道的那些事之代码块_轻狂书生FS的博客-CSDN博客
原出处:CSDN博客
侵删

java 静态代码块_关于Java你不知道的那些事之代码块相关推荐

  1. java 静态对象赋值_基于Java class对象说明、Java 静态变量声明和赋值说明(详解)...

    先看下JDK中的说明: java.lang.Object java.lang.Class Instances of the class Class represent classes and inte ...

  2. java静态多态实例_[后续] Java 中类的实例化过程之多态篇--(终于发现Java 原来是这样则的玩的)...

    这篇博文依然和大家分享Java 类的实例化过程 值多态篇.和往常一样,直接来上这这阿里的道面试题: 父类的声明如下所示: 1 public classParentD {2 //1.类变量进行初始化 3 ...

  3. Java静态编译技术:突破Java“冷启动”桎梏,实现启动性能“质”的飞跃

    自1996年诞生以来,Java语言长期在最受欢迎的编程语言排行榜中占据领先地位.除了语言本身的优秀特性之外,Java语言持续演进.不断发展也是它能够保持长盛不衰的重要原因. |Java市场份额不断下降 ...

  4. java项目----教务管理系统_基于Java的教务管理系统

    java项目----教务管理系统_基于Java的教务管理系统 2022-04-22 18:18·java基础 最近为客户开发了一套学校用教务管理系统,主要实现学生.课程.老师.选课等相关的信息化管理功 ...

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

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

  6. java编程代码大全_掌握Java编程技巧,代码重构

    代码重构在不改变软件系统外部行为的前提下,改善它的内部结构,通过调整程序代码改善软件的质量.性能,使其程序的设计模式和架构更趋合理,提高软件的扩展性和维护性. 代码重构目标 持续纠偏和改进软件设计 随 ...

  7. java代码识别_识别Java中的代码气味

    java代码识别 作为软件开发人员,我们不仅要编写有效的代码,而且还要编写可维护的代码,这是我们的责任. Martin Fowler在他的<重构:改进现有代码的设计>中将代码气味定义为: ...

  8. java compare 返回值_关于Java你不知道的那些事之Java8新特性[Lambda表达式和函数式接口]...

    前言 为什么要用Lambda表达式? Lambda是一个匿名函数,我们可以把Lambda表达式理解为是一段可以传递的代码,将代码像数据一样传递,这样可以写出更简洁.更灵活的代码,作为一个更紧凑的代码风 ...

  9. 怎么在Java里辨别小数_求教java中如何判断一个数是不是小数,求详细代码及解释...

    求教java中如何判断一个数是不是小数,求详细代码及解释 关注:62  答案:2  mip版 解决时间 2021-01-29 22:49 提问者孤酒醉人心 2021-01-29 03:13 求教jav ...

最新文章

  1. 一个不错的机器视觉库 SimpleCV: a kinder, gentler machine vision library
  2. 在ASP.NET AJAX 1.0框架中访问Web服务
  3. 总谐波失真80_谐波平衡法仿真(ADS)
  4. themyleaf 图片上传_springboot thymeleaf 整合 百度富文本编辑器UEditor进行图片上传
  5. (50)VHDL实现增减计数器
  6. 文本聚类分析算法_常用的聚类分析算法综述
  7. 这一次,MIT的科学家让谷歌AI把步枪误认成直升机
  8. scrapy 爬取百度知道,多spider子一个项目中,使用一个pielines
  9. 佳能g2810打印机扫描怎么用_佳能g2810打印机说明书
  10. 运行Puttygen.exe生成密钥
  11. 点晴oa系统搭服务器,免费OA办公系统的亮点所在
  12. Linux —— 时间问题(localtime和gmtime)
  13. Autumn中文文档4:响应客户端结果
  14. 11.11如何卖到一个亿:从0到1的电商爆品打造术 电子书 PDF
  15. Win7系统网络适配器不见了的解决办法
  16. 支付宝转账-提取根证书失败 AlipayRootCert Is Invalid
  17. 技术分享 | OpenVINO及EdgeX摄像头管理和推理平台
  18. ST-LINK/V2 + STM8 + STVP 下载程序+Error on Option Bytes
  19. 开网店快递费怎么算_开网店快递费怎么样最省钱 教你如何降低快递费
  20. 《Photoshop Lightroom4 经典教程》—第1课1.4节Lightroom工作流程

热门文章

  1. 如何root安卓手机_安卓Root+卡开机画面救砖教程丨以一加手机为例
  2. C++起航篇——bool类型,输入输出,命名空间
  3. PHP建站环境搭建:汇总网上常见的1键安装包
  4. hive中not in优化
  5. c#利用定时器自动备份数据库(mysql)
  6. 在vue.js引用图片的问题
  7. 团队Alpha冲刺(三)
  8. hdu-1877(大数+进制转换)
  9. SpringCloud学习--微服务架构
  10. PHP list的赋值