标题: 静态初始化块与非静态初始化块的区别 [打印本页] 作者: 瓶中人 时间: 2013-11-3 11:00 标题: 静态初始化块与非静态初始化块的区别 非静态初始化主要用于对象的初始化操作,在每次创建对象时都要调用一次,其执行顺序在构造方法之前。
如果初始化块前有static关键字修饰,那么该初始化块称为静态初始化块。由于非静态成员不能在静态方法中使用,同样也不在静态初始化块中,因此静态初始化块主要用于初始化静态变量和静态方法。静态初始化块只调用一次,是在类被第一次加载到内存时,并非一定要创建对象才执行。
静态初始化块的执行顺序在非静态初始化块之前。
示例如下:
public class Test
{
public static void main(String[] args)
{
T a = new T();
T a2 = new T();
}
}
class T
{
==非静态初始化块==
==无参的构造方法==
通过上述示例可以看出静态初始化块仅在第一次创建对象时执行,第二次就没有执行,而非静态代码块则可以在每次创建对象都执行一次。
还有静态代码块是在类加载器第一次加载该类时调用,不一定非要创建对象才触发,如果使用“类名.静态方法(静态属性)”也会执行静态初始化块的。
如下例:
public class Test
{
public static void main(String[] args)
{
T.sayHi();
}
}
class T
{
static
{
System.out.println("==静态初始化块==");
}
public static void sayHi()
{
System.out.println("HelloWorld!");
}
}