Java基础——初始化块
来源:互联网 发布:影视包装培训软件 编辑:程序博客网 时间:2024/05/17 02:52
Java使用构造器对单个对象进行初始化操作,使用构造器先完成整个Java对象的状态初始化,然后将Java对象返回给程序,从而让该Java对象的信息更加完整。与构造器作用非常类似的是初始化块,它也可以对Java对象进行初始化操作。
一、 使用初始化块
初始化块是Java类里出现的第4种成员(前面依次有成员变量、方法和构造器),一个类里可以有多个初始化块,相同初始化块之间有顺序:前面定义的初始化块先执行,后面定义的初始化块后执行。初始化块的语法格式如下:
[修饰符] { //初始化块的可执行代码 ...}
初始化块的修饰符只能是static,使用static修饰的初始化块被称为静态初始化块。初始化块里的代码可包含任何可执行语句,包括定义局部变量调用其他对象的方法,以及使用分支、循环语句等。
下面一个程序定义了一个Person类,它既包含了构造器,也包含了初始化块。下面看看程序在程序中创建Person对象时发生了什么。
public class Person{ //下面定义一个初始化块 int a = 6; if(a > 4) { System.out.println("局部变量a的值大于4"); } System.out.println("Person的初始化块");}//定义第二个初始化块{ System.out.println("Person的第二个初始化块");}//定义无参数的构造器{ System.out.println("Person类的无参数构造器");}public static void main(String[] args){ new Person():}
输出结果:
局部变量a的值大于4
Person的初始化块
Person的第二个初始化块
Person类的无参数构造器
运行结果可以看出,当创建Java对象时,系统总是先调用该类里定义的初始化块,如果一个类里定义了2个普通初始化块,则前面定义的初始化块先执行,后面定义的初始化块后执行。
初始化块虽然也是Java类的一种成员,但它没有名字,也就没有标识,因此无法通过类、对象来调用初始化块。初始化块只在创建Java对象时隐式执行,而且在执行构造器之前执行。
看如下代码:
public class InstanceInitTest{ //先执行初始化块将a实例变量赋值为6 { a = 6; } //先执行a实例变量赋值为9 int a = 9; public static void main(String[] agrs) { //下面将输出9 System.out.println(new InstanceInitTest().a); }}
上面程序中定义了两次对a实例变量赋值,执行结果是a实例变量的值为9,这表明int a = 9这行代码比初始化块后执行。但如果将粗体字初始化块代码与int a = 9顺序调换一下,将可以看到程序输出InstanceInitTest的实例变量a的值为6,这是由于初始化块中代码再次将a实例变量的值设为6。
二、初始化块和构造器
从某种程度来看,初始化块是构造器的补充,初始化块总是在构造器执行之前执行。系统使用初始化块来进行对象的初始化操作。
与构造器不同的是,初始化块是一段固定执行的代码,它不能接受任何参数。因此初始化块对同一个类的所有对象进行初始化处理完全相同。
基于这个原因,不难发现初始化块的基本用法,如果有一段初始化处理代码对所有对象完全相同,且无需接受任何参数,就可以把这段初始化代码提取到初始化块中。
注意:
实际上初始化块是一个假象,使用javac命令编译Java类后,该Java类中的初始化块会消失——初始化块中代码会被“还原”到每个构造器中,且位于构造器所有代码的前面。
三、静态初始化块
如果定义初始化块时使用了static修饰符,则这个初始化块就变成了静态初始化块,也被称为类初始化块(普通初始化块负责对对象进行初始化,类初始化块则负责对类进行初始化)。静态初始化块是类相关的,系统将在类初始化阶段进行静态初始化块,而不是在创建对象时候才执行。因此静态初始化总是比普通初始化块先执行。
静态初始化块是类相关的,用于对整个类进行初始化处理,通常用于对类变量执行初始化处理。静态初始化块不能对实例变量进行初始化处理。
- Java基础——初始化块
- java基础---初始化块
- Java基础(四)——初始化块
- Java——初始化块,初始化块与构造方法,静态初始化块
- java静态初始化块、实例初始化块
- JAVA中面向对象基础:抽象类、初始化块
- java基础,静态变量,静态初始化块,初始化快,成员变量的初始化顺序
- Java中的初始化块
- Java中的初始化块
- Java中的初始化块
- Java:初始化块
- Java中的初始化块
- Java的初始化块
- java中初始化块
- java 初始化块笔记
- Java静态初始化块
- java初始化块
- Java 静态初始化块
- 解决 "X: user not authorized to run the X server, aborting."
- 前端框架之SiteMesh
- Linux 解除安裝 Java?
- Android ConditionVariable
- 加密会话(SSL)Cookie 中缺少 Secure 属性
- Java基础——初始化块
- firefox profile问题的排查
- self和Super的msgSend
- 仿饿了么百度地图定位
- POJ1006 Biorhythms (CRT)
- 32位与64位下各类型长度对比
- Linux syslog机制
- 【图形学与游戏编程】开发笔记-基础篇2:DX11初始化
- 南歌子.记2016年仲夏独上平江石牛寨过玻璃天桥