Java基础——初始化块

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修饰符,则这个初始化块就变成了静态初始化块,也被称为类初始化块(普通初始化块负责对对象进行初始化,类初始化块则负责对类进行初始化)。静态初始化块是类相关的,系统将在类初始化阶段进行静态初始化块,而不是在创建对象时候才执行。因此静态初始化总是比普通初始化块先执行

静态初始化块是类相关的,用于对整个类进行初始化处理,通常用于对类变量执行初始化处理。静态初始化块不能对实例变量进行初始化处理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值