初始化块
来源:互联网 发布:淘宝商城赚钱的吗 编辑:程序博客网 时间:2024/05/01 10:05
初始化块是Java类里可出现的第四种成员(前面依次有属性、方法和构造器),一个类里可以有多个初始化块。
初始化块的作用与构造器的非常类似,它也可以对Java对象进行初始化操作。
初始化块的语法格式如下:
[修饰符]{
//初始化块的可执行性代码
...
}
初始化块的修饰符只能是static,使用static修饰的初始化块称为静态初始化块。初始化块里的代码可以包含任何可执行语句,包括定义局部变量、调用其他对象的方法、使用分支、循环语句等。
初始化块也是Java类的一种成员,但它没有名字,因此无法通过类、对象来调用初始化块。初始化块只在创建Java对象时隐式执行,而且在执行构造器之前执行。
例如:
public class Person{
//下面定义一个初始化块
{
int a=6;
if(a>4){
System.out.println("Person初始化块:局部变量a的值大于4");
}
System.out.println("Person的初始化块");
}
//定义第二个初始化块
{
System.out.println("Person的第二个初始化块”);
}
//定义无参数的构造器
public Person(){
System.out.println("Person的无参数构造器");
}
public static void main(String[] args){
new Person();
}
}
运行结果:
Person初始化块:局部变量a的值大于4
Person的初始化块
Person的第二个初始化块
Person的无参数构造器
注意:虽然Java允许一个类里定义多个普通初始化块,但这没意义。因为初始化块时在创建Java对象时隐式执行的,而且它们总是全部执行,因此,完全可以把多个普通初始化块合并一个初始化块,从而让程序更加简洁。
注意:当Java创建一个对象时,系统先为该对象的所有实例属性分配内存,接着程序开始对这些实例属性执行初始化。其初始化顺序是:先执行初始化块或生命属性时指定的初始值,再执行构造器里指定的初始值。
与构造器不同的是,初始化块是一段固定执行的代码,它不能接受任何参数。因此初始化块对同一个类所有对象所进行的初始化处理完全相同。因此,如果有一段初始化处理代码对所有对象完全相同,且不接受任何参数,就可以把这段初始化代码提取到初始化块。
与构造器类似,创建Java对象时,不进会执行该类的普通初始化块和构造器,系统会一直上溯到Object类,先执行Object类的初始化块,开始执行Object的构造器,依次向下执行其父类的初始化块,开始执行器父类的构造器...最后才执行该类的初始化块和构造器。
除此之外,如果希望类加载后对整个类进行某些初始化操作,此时需要使用static关键字修饰初始化块,被称为静态初始化块。静态初始化块是类相关的,系统将在类初始化阶段执行静态初始化块,而不是在创建对象时才执行。因此静态初始化块总是比普通初始化块先执行。
注意:静态初始化块也被称为类初始化块,也属于类的静态成员,同样遵循静态成员不能访问非静态成员的规则,因此静态初始化块不能访问非静态成员,包括不能访问实例属性和实例方法。
执行顺序:先执行Object类的静态初始化块,在执行父类的静态初始化块...最后才执行该类的静态初始化块,经过这个过程,才完成了该类的初始化过程。只有当类初始化完成后,才可以在系统中使用这个类。
- 初始化块
- 初始化块
- 初始化块
- 初始化块
- 初始化块
- 初始化块
- 初始化块
- 初始化块
- 初始化块
- 初始化块
- 初始化块
- 初始化块
- 初始化块
- 初始化块
- 初始化块/静态初始化块
- 静态初始化块、初始化块、构造函数
- 静态初始化块、初始化块、构造函数
- 初始化块 和 静态初始化块
- python列表去重
- 43. 复制或保存冲突之保存篇
- JavaSE 基础回顾(三)——环境变量配置
- Android_HttpURLConnection_Get和Post请求
- Eclipse 3.6 安装velocity插件Veloeclipse
- 初始化块
- 5个免费项目管理工具
- spring AOP @Around @Before @After 区别
- Fragment 无法响应OnActivityResult 问题
- HDU——1009——FatMouse' Trade
- 直接插入排序
- Domain Transform for Edge-Aware Image and Video Processing
- 字符串移位包含的问题
- 在Mysql中导入.sql文件