转载自:http://blog.csdn.net/aledavvv/article/details/16920743
static{}(静态代码块)与{}(非静态代码块)的异同点
相同点:都是在JVM加载类时且在构造方法执行之前执行,在类中都可以定义多个,
一般在代码块中对一些static变量进行赋值。
不同点:静态代码块在非静态代码块之前执行(静态代码块—>非静态代码块—>构造方法)。
静态代码块只在第一次new执行一次,之后不再执行,而非静态代码块在每new
一次就执行一次。非静态代码块可在普通方法中定义(不过作用不大);而静态代码块不行。
例:
// 普通类public class PuTong {
public PuTong(){
System.out.print(" 默认构造方法! -->");
}
// 非静态代码块
{
System.out.print(" 非静态代码块! -->");
}
// 静态代码块
static {
System.out.print(" 静态代码块! -->");
}
public static void test(){
{
System.out.println(" 普通方法中的代码块! ");
}
}
}
// 测试类
public class TestClass {
/**
* 区别两次 new 静态与非静态代码块执行情况
*/
public static void main(String[] args) {
PuTong c1 = new PuTong();
c1.test();
PuTong c2 = new PuTong();
c2.test();
}
}
/*
运行输出结果是:
静态代码块! --> 非静态代码块! --> 默认构造方法! --> 普通方法中的代码块!
非静态代码块! --> 默认构造方法! --> 普通方法中的代码块!
*/
一般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情况下,其他程序来调用的时候,需要使用静态方法,这种代码是被动执行的.
两者的区别就是:静态代码块是自动执行的;
静态方法是被调用的时候才执行的.
作用:静态代码块可用来初始化一些项目最常用的变量或对象;静态方法可用作不创建对象也可能需要执行的代码.