Java初始化块
1、使用初始化块
[修饰符]{
//初始化块的可执行性代码
}
初始化块虽然也是Java类的一种成员,但它没有名字,也就没有标识,因此无法通过类、对象来调用初始化块。初始化块只在创建Java对象时隐式执行,而且在执行构造器之前执行。
普通初始化块、声明实例变量指定的默认值都可以是对象的初始化代码,他们的执行顺序与源代码中的排列顺序相同。如下代码
public class InstanceInitTest {
{
a = 6;
}
int a = 9;
public static void main(String[] args) {
// TODO Auto-generated method stub
//输出结果为9
System.out.println(new InstanceInitTest().a);
}
}
当Java创建一个对象时,系统先为该对象的所有实例变量分配内存,接着程序开始对这些实例变量进行初始化,其初始化的顺序是:先执行初始化块或声明实例变量时指定的初始值(这两个地方指定初始值的执行允许与它们在源代码中的排列顺序相同),再执行构造器力指定的初始值。
如果两个构造器中有相同的初始化代码,且这些初始化代码无须接受参数,就可以把它们放在初始化块中定义。
2、静态初始化块
如果定义初始化块时使用了static修饰符,则这个初始化块就变成了静态初始化块。静态初始化块时类相关的,系统将在类初始化阶段执行静态初始化块,而不是在创建对象时才执行。因此静态初始化块总是比普通初始化块先执行。
下面创建三个类:Root、Mid和Leaf,这三个类都提供了静态初始化块和普通初始化块,而Mid类中还使用了this调用重载的构造器,而Leaf使用了super显示调用父类指定的构造器。
class Root
{
static{
System.out.println("Root的静态初始化块");
}
{
System.out.println("Root的普通初始化块");
}
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();
System.out.println("Mid的带参构造函数,其参数值为:"+msg);
}
}
class leaf extends Mid
{
static{
System.out.println("leaf的静态初始化块");
}
{
System.out.println("leaf的普通初始化块");
}
public leaf()
{
System.out.println("leaf的无参构造函数");
}
}
public class InstanceInitTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
new leaf();
new leaf();
} }

从结果来看,第一次创建一个leaf对象时,因为系统中还不存在Leaf类,因此需要先加载并初始化Leaf类,初始化Leaf类时先执行其顶层父类的静态初始化块,再执行其直接父类的静态初始话块,最后才执行Leaf本身的静态初始话块。
一旦初始化Leaf类初始化后,Leaf类在该虚拟机力将一直存在,因此当第二次创建Leaf实例时无需再次对Leaf类进行初始化。
普通初始化块和构造器的执行顺序与前面介绍的一致。
静态初始化块和声明静态成员变量时所指定的初始化值都是该类的初始化代码,它们的执行顺序与源代码中的排序顺序相同。
Java初始化块的更多相关文章
- java初始化块执行顺序
java中初始化块的执行顺序在构造器之前,多个初始化块之间定义在前的先执行.如下: public class InitialBlockTest { // The first one { System. ...
- Java 初始化块
初始化块是和成员变量.成员函数一个级别的.一般用于类的初始化,也可执行其他java代码,作用和构造函数相同. 创建对象时,初始化块在构造函数之前执行. 初始化块分为普通初始化块.静态初始化块. 普通初 ...
- Java初始化块的作用
1.使代码更简洁 eg: public class Test { private void init() { System.out.println("初始化状态"); } publ ...
- Java初始化块及执行顺序
理解 初始化块又称为代码块.属于类中的第四大成员.本质上是一个方法,它也有方法体,但没有方法名,没有参数,没有返回,而且也不是通过对象或类名显式调用,而是通过隐式调用 是构造器的补充 语法 [修饰符] ...
- Java的初始化块及执行过程详解
问题:Java对象初始化方式主要有哪几种?分别是什么?针对上面的问题,想必大家脑海中首先浮现出的答案是构造器,没错,构造器是Java中常用的对象初始化方式. 还有一种与构造器作用非常相似的是初始化块, ...
- Java的初始化块、静态初始化块、构造函数的执行顺序及用途探究
Java与C++有一个不同之处在于,Java不但有构造函数,还有一个”初始化块“(Initialization Block)的概念.下面探究一下它的执行顺序与可能的用途. 执行顺序 首先定义A, B, ...
- java类的初始化块/执行顺序,实例化对象数据赋值
java里初始化一个类的对象,通过初始化快或者构造方法进行数据赋值.与其相关的执行代码有这么几种: 静态初始化块 初始化块 构造方法 静态初始化块 静态初始化块只在类加载时执行一次,同时静态初始化块只 ...
- 什么是Java实例初始化块
在本篇文章,我将会使用一个例子展示什么是实例变量初始化块,实例初始化块和静态初始化块,然后说明在Java中实例初始化块是如何工作的. 执行顺序 查看下面的代码,你知道哪个先执行吗? package s ...
- Java 中的 static 使用之静态初始化块
Java 中可以通过初始化块进行数据赋值.如: 在类的声明中,可以包含多个初始化块,当创建类的实例时,就会依次执行这些代码块.如果使用 static 修饰初始化块,就称为静态初始化块. 需要特别注意: ...
随机推荐
- javascript的数组之slice()
slice()方法创建一个新数组,将原数组的部分元素拷贝到新数组,并将新数组返回,且原数组不会被修改. var animals = ['ant', 'bison', 'camel', 'duck', ...
- JSON.stringify 语法实例讲解+easyui data-options属性+expires【申明:来源于网络】
JSON.stringify 语法实例讲解+easyui data-options属性+expires[申明:来源于网络] JSON.stringify 语法实例讲解:http://www.jb51. ...
- C++中继承与抽象类
继承语法格式如下: class 子类名称 : 继承方式(public private protected 三种) 父类名称 纯虚函数格式: virtual 返回值类型 函数名(参数列表)= 0:含有纯 ...
- 小甲鱼零基础python课后题 P22 021函数:递归是神马
0.递归在编程上的形式是如何表现的呢? 答:在编程上,递归表现为函数调用本身这么一个行为. 1.递归必须满足哪两个基本条件? 答:1函数调用自己. 2有正确的返回条件 2.思考一下,按照递归的特性,在 ...
- es6的对象新增的方法
Object.is 可以看成是=== 的加强版, 其修正了 === 的 NaN 不等于自身, 以及 +0 等于 -0 另外说下, == 会自动转型, 但是 Object.is 也是如果类型不一致也是不 ...
- APICloud · 跨越2018,技术改变世界
在APICloud发展轨迹中, 2018注定是疾速的一年, 更多的风口趋势和现象级应用背后, 是技术在推动着世界的加速转动. APICloud所提供的技术服务,在混合之力的驱动下不断完善升级,“让你的 ...
- python基础4 input()函数
input()函数 赋值输出: name=input('请求输入你喜欢的电影名:')print(name+'是我最喜欢的电影!') 输入:大话西游 输出:大话西游是我最喜欢的电影! print('那么 ...
- 微信小程序--地图组件与api-模拟器上返回的scale 与真机上不同--bindregionchange触发图标一直闪现问题
场景:根据地理定位获取不同地区的充电桩位置,要求 1.平移的时候,跟随坐标变化展示不同区域的坐标点信息 2.不同的缩放等级,14以下,展示聚合点数据,14以上,展示真正的站点信息: 3.点击聚合点的时 ...
- Jmeter学习之--dubbo接口测试
背景:公司的h5和APP都需要调用许多非http的服务,需要对服务的性能和自动化测试 工具:IDEA ,maven,Jmeter 参考文档: https://testerhome.com/topics ...
- Windows 10安装Docker 步骤及顺序
最近在工作中,重新安装Docker时,遇到了一点坑,故将自己解决经验分享一下~ Hardware assisted virtualization and data execution protecti ...