1:首先加载被final static 修饰的原始数据类型的数据成员(若是其他类型的对象,包括原始数据类型的类包装器,如Integer,也排在第3加载)。

2:其次加载处于static块中的代码块。

3:最后才是加载只被static修饰的数据成员。

 

测试实例:

 

package com.liu.person;
import java.util.Random;
public class TestStatic {
 public static int a = 10;
 public static final String  s1 = new String("sss");
 
 public static final String  s2 = "aaaaaaa";
 public static final int b = new Integer(20);
 public static final int c = new Random().nextInt();
 
 public static final int d = 250;

 
 static {
  a = 0;
  System.out.println("initable InitSquence");
 } 
 public static void main(String[] args) {
  
  System.out.println(TestStatic.s1);
 }}

 

输出:

->initable InitSquence
         ->sss

 

如果改成:

System.out.println(TestStatic.s2);

则输出:

->aaaaaaa

 

如果改成:

System.out.println(TestStatic.b);

则输出:

->initable InitSquence
            ->20

 

如果改成:

System.out.println(TestStatic.a);

则输出:

->initable InitSquence
            ->0

如果改成:

System.out.println(TestStatic.d);

则输出:

->250