java 静态代码块_关于Java你不知道的那些事之代码块
前言
普通代码块:在方法或语句中出现的{},就被称为代码块
静态代码块:静态代码块有且仅加载一次,也就是在这个类被加载至内存的时候
普通代码块和一般语句执行顺序由他们在代码中出现的次序决定,先出现先执行
代码一
/**
对于上述方法,我们一下就能看出它的输出结果
普通代码块中的变量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你不知道的那些事之代码块相关推荐
- java 静态对象赋值_基于Java class对象说明、Java 静态变量声明和赋值说明(详解)...
先看下JDK中的说明: java.lang.Object java.lang.Class Instances of the class Class represent classes and inte ...
- java静态多态实例_[后续] Java 中类的实例化过程之多态篇--(终于发现Java 原来是这样则的玩的)...
这篇博文依然和大家分享Java 类的实例化过程 值多态篇.和往常一样,直接来上这这阿里的道面试题: 父类的声明如下所示: 1 public classParentD {2 //1.类变量进行初始化 3 ...
- Java静态编译技术:突破Java“冷启动”桎梏,实现启动性能“质”的飞跃
自1996年诞生以来,Java语言长期在最受欢迎的编程语言排行榜中占据领先地位.除了语言本身的优秀特性之外,Java语言持续演进.不断发展也是它能够保持长盛不衰的重要原因. |Java市场份额不断下降 ...
- java项目----教务管理系统_基于Java的教务管理系统
java项目----教务管理系统_基于Java的教务管理系统 2022-04-22 18:18·java基础 最近为客户开发了一套学校用教务管理系统,主要实现学生.课程.老师.选课等相关的信息化管理功 ...
- java里的初始化块_[转载] Java 语言中的实例初始化块 ( IIB) 详解
参考链接: Java中的实例初始化块(IIB) 在 Java 语言中的类初始化块 文章中我们简单的介绍了下 Java 中的实例初始化块 ( IIB ).不过我觉得介绍的有点简单了,于是,再写一篇文章详 ...
- java编程代码大全_掌握Java编程技巧,代码重构
代码重构在不改变软件系统外部行为的前提下,改善它的内部结构,通过调整程序代码改善软件的质量.性能,使其程序的设计模式和架构更趋合理,提高软件的扩展性和维护性. 代码重构目标 持续纠偏和改进软件设计 随 ...
- java代码识别_识别Java中的代码气味
java代码识别 作为软件开发人员,我们不仅要编写有效的代码,而且还要编写可维护的代码,这是我们的责任. Martin Fowler在他的<重构:改进现有代码的设计>中将代码气味定义为: ...
- java compare 返回值_关于Java你不知道的那些事之Java8新特性[Lambda表达式和函数式接口]...
前言 为什么要用Lambda表达式? Lambda是一个匿名函数,我们可以把Lambda表达式理解为是一段可以传递的代码,将代码像数据一样传递,这样可以写出更简洁.更灵活的代码,作为一个更紧凑的代码风 ...
- 怎么在Java里辨别小数_求教java中如何判断一个数是不是小数,求详细代码及解释...
求教java中如何判断一个数是不是小数,求详细代码及解释 关注:62 答案:2 mip版 解决时间 2021-01-29 22:49 提问者孤酒醉人心 2021-01-29 03:13 求教jav ...
最新文章
- 一个不错的机器视觉库 SimpleCV: a kinder, gentler machine vision library
- 在ASP.NET AJAX 1.0框架中访问Web服务
- 总谐波失真80_谐波平衡法仿真(ADS)
- themyleaf 图片上传_springboot thymeleaf 整合 百度富文本编辑器UEditor进行图片上传
- (50)VHDL实现增减计数器
- 文本聚类分析算法_常用的聚类分析算法综述
- 这一次,MIT的科学家让谷歌AI把步枪误认成直升机
- scrapy 爬取百度知道,多spider子一个项目中,使用一个pielines
- 佳能g2810打印机扫描怎么用_佳能g2810打印机说明书
- 运行Puttygen.exe生成密钥
- 点晴oa系统搭服务器,免费OA办公系统的亮点所在
- Linux —— 时间问题(localtime和gmtime)
- Autumn中文文档4:响应客户端结果
- 11.11如何卖到一个亿:从0到1的电商爆品打造术 电子书 PDF
- Win7系统网络适配器不见了的解决办法
- 支付宝转账-提取根证书失败 AlipayRootCert Is Invalid
- 技术分享 | OpenVINO及EdgeX摄像头管理和推理平台
- ST-LINK/V2 + STM8 + STVP 下载程序+Error on Option Bytes
- 开网店快递费怎么算_开网店快递费怎么样最省钱 教你如何降低快递费
- 《Photoshop Lightroom4 经典教程》—第1课1.4节Lightroom工作流程