标签:
前言
我们知道在java中通过构造器来为对象进行初始化操作,但是在java中与构造器类似的还有初始化块的操作,下面小编来为大家分享一下。
初始化块使用
在Java中初始化块是java中出现的第4中成员,前三种分别是成员变量、方法和构造器。一个类中可以有多个初始化块,并且相同类型的初始化块是按照顺序依次执行的。初始化块的修饰符只能是static,初始化块可以包含任何可执行语句,包括定义局部变量、调用其他对象方法,以及使用分支、循环语句等
/**
* @FileName: test.java
* @Package:com.number
* @Description: TODO
* @author: LUCKY
* @date:2015年11月29日 下午12:55:00
* @version V1.0
*/
package com.number;
/**
* @ClassName: test
* @Description: TODO
* @author: LUCKY
* @date:2015年11月29日 下午12:55:00
*/
public class test {
int cd;
int d=9;
{
// 下面定义一个初始化块
int a = 6;
System.out.println(a > 4 ? "局部变量a大于4" : "局部变量a小于4");
}
int c=0;
public test(){
cd=10;
System.out.println("初始化构造器");
}
public static void main(String[] args) {
test test = new test();
System.out.println(Integer.compare(2, 3));
}
}
初始化块和构造器
可以从某种程度上来看,初始化块是构造器的补充,初始化块总是在构造器之前执行,可以使用初始化器来进行对象的初始化操作。
但是初始化块与构造器又有区别,它只是一段固定的执行的代码,不能接受任何的参数。因此初始化器的应用场景我们可以理解为,当两个或者多个构造器中有相同的初始化代码,并且这些初始化代码无须接受参数的时候,就可以把他们放在初始化块中定义。通过把多个构造器中相同的代码提取到初始化中定义,能更好的提高初始化代码的复用,提高整个应用的可维护性。
静态初始化块
如果定义初始化块时使用了static修饰符,则这个初始化块就变成了静态初始化块,也被称为类初始化块(普通初始化块负责对对象进行初始化操作,类初始化块负责对类进行初始化)。静态初始化块是与类相关的,系统将在类初始化块阶段进行静态初始化块,而不是在创建对象的时候才执行。因此静态初始化块总是比普通初始化块先执行。
废话不多说了,来看一下下面的Demo,解解闷吧!一定要认真的跑一遍。
package com.test;
class Root
{
static{
System.out.println("Root的静态初始化块");
}
{
System.out.println("Root的普通初始化块");
}
public 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调用同一类中重载的构造器
this();
System.out.println("Mid的带参数构造器,其参数值:"
+ msg);
}
}
class Leaf extends Mid
{
static{
System.out.println("Leaf的静态初始化块");
}
{
System.out.println("Leaf的普通初始化块");
}
public Leaf()
{
// 通过super调用父类中有一个字符串参数的构造器
super("疯狂Java讲义");
System.out.println("执行Leaf的构造器");
}
}
public class Test
{
public static void main(String[] args)
{
new Leaf();
}
}
标签:
原文地址:http://blog.csdn.net/luckyzhoustar/article/details/50125653