有时候看到代码里有一段public class A{
static{
     …………
  }
}
这种代码有什么用?

解决方案 »

  1.   

    静态代码块,在 new Object 的时候就会立即自动执行static块内的代码。
      

  2.   

    静态初始化语句块啊,用来帮忙初始化的
    比如public class A{
    String[] str=new String[5];
    static{
        for(int i=0;i<5;++i){
            str[i]="Hello";
        }
      }
    }
      

  3.   

    学习JAVA这门面向对象的语言,实质就是不断地创建类,并把类实例化为对象并调用方法。对于初学JAVA的人总搞清楚对象是如何实例化的,假如类之间存在继承关系,那就更糊涂了。下面我们通过两个例题来说明对象的实例化过程。
    例1:
       
    编译并运行该程序会有以下输出
    Static Block
    Employee Company:china soft
    Non-Static Block
    Employee phone:0755-51595599
    Employee(String)
    Empoloyee()
    下面我们来对结果做分析:
    1 在代码34行实例化对象时, 先对给静态变量分配内存空间并初始化,然后执行静态块。
    因此,在这里会输出:
    Static Block
    Employee Company:china soft
    Employee Company:china soft的输出也说明是先初始化静态变量然后再执行静态块,否则company将为null。
    2然后在内存中为Employee分配内存空间,并做默认初始化(即所有变量初始化为默认值,这里都初始化为null)。
    3 默认初始化完成后,开始显示初始化。即执行第5行,将phone初始化"0755-51595599",并且执行非静态方法块;因此在这里会有以下输出:
    Non-Static Block
    Employee phone:0755-51595599
    4 最后才调用默认构造函数,在默认构造函数中调用了带参数的构造函数,所以在这里先输出带参数构造函数中的:Employee(String),然后才输出:Empoloyee()。 例2:
      
     上面的代码中Manager继承了前面写的Employee类,当我们编译并运行Manager类,会产生以下的输出:Static Block
    Employee Company:china soft
    Sub Static Block
    Manager department:sale
    Non-Static Block
    Employee phone:0755-51595599
    Employee(String)
    Empoloyee()
    Sub Non-Static Block
    Manager salary:8000
    Manager(String)
    Manager()
    下面我们对结果做分析:
    1 在行34实例化对象时,由于Manager继承了Employee,所以先从父类Employee开始;先给父类静态变量分配内存空间并初始化,然后执行父类静态块。然后再给子类静态变量分配内存空间并初始化,然后执行子类静态块,所以会得到以下输出:
    Static Block
    Employee Company:china soft
    Sub Static Block
    Manager department:sale2然后在内存中为父类Employee分配内存空间,并做默认初始化;再为子类Manager分配内存空间,并做默认初始化。
    3默认初始化完成后,从父类开始显示初始化并执行非静态方法块和构造函数,然后再子类开始显示初始化并执行非静态方法块和构造函数。因此会产生以下的输出:
    Employee phone:0755-51595599
    Employee(String)
    Empoloyee()
    Sub Non-Static Block
    Manager salary:8000
    Manager(String)
    Manager()总结以上内容,可以得到对象初始化过程:
    1 如果存在继承关系,就先父类后子类;
    2 如果在类内有静态变量和静态块,就先静态后非静态,最后才是构造函数;
    3 继承关系中,必须要父类初始化完成后,才初始化子类。
    4.如需了解更多相关技术,请点击www.5itjob.com
      

  4.   

    静态初始化块。只在类加载的时候执行,且执行一次例如 public static void main(String g[]){} 这个java主函数也是静态初始化的。。
      

  5.   

    静态代码块 public static void main(String[] args)为总程序入口 先于static代码块执行,先执行main函数(也为static)然后执行static代码块,且只执行一次
      

  6.   


    注意是加载 不是说必须在new的时候类才加载
      

  7.   

    静态块、静态成员、静态方法,以及静态内部类,也就是说带有 static 的东西,在类加载的时候就会初始化(并不需要产生实例),而且仅会初始化一次(因为类只需要加载一次就够了)。也就是说使用 Class.forName("com.test.A"); 这样加载类时就会初始化静态块。这也就是为什么 JDBC 要使用 Class.forName("xxx.xxx.xxx.Driver"); 来加载驱动的原因了。因为 JDBC 规范规定驱动类必须在其静态块中使用 DriverManager.registerDriver 方法将自己注册到驱动管理器中去。
      

  8.   

    xue dao dong xi l