问一个有关静态数据初始化的问题
class   Cup{ 
 	Cup(int   marker){ 
 		System.out.println( "Cup( "+marker+ ") "); 
 	} 
 	void   f(int   marker){ 
 		System.out.println( "f( "+marker+ ") "); 
 	} 
 } 
 class   Cups{ 
 	static   Cup   c1; 
 	static   Cup   c2; 
 	static{  		 
 		c1=new   Cup(1); 
 		c2=new   Cup(2); 
 	} 
 	static{ 
 		System.out.println( "dfdsfsdf "); 
 	} 
 	Cups(){ 
 		System.out.println( "Cups() "); 
 	} 
 }     
    class   ExplicitStatic   { 
 	public   static   void   main(String[]   args)   { 
                         System.out.println( "Inside   main() "); 
                         Cups.c1.f(99);//1                        
 	} 
    //static   Cups   x   =   new   Cups();//2 
 } 
 这样输出结果是: 
 Inside   main() 
 Cup(1) 
 Cup(2) 
 dfdsfsdf 
 Cups() 
 Press   any   key   to   continue... 
 但是如果1注释掉,改成2 
 变成的是: 
 Cup(1) 
 Cup(2) 
 dfdsfsdf 
 Cups() 
 Inside   main() 
 Press   any   key   to   continue... 
 Inside   main()一个在前,一个在后,请问到底是什么原因啊。。求救啊。。     
------解决方案--------------------class ExplicitStatic { 
 public static void main(String[] args) { 
 System.out.println( "Inside main() "); 
 //Cups.c1.f(99);//1   
 } 
 static Cups x = new Cups();//2 
 } 
 先初始化静态域,也就是先执行2
------解决方案--------------------第一种方法执行顺序应该是: 
 加载类ExplicitStatic --〉执行ExplicitStatic.main()方法 -->  加载类Cups ....   
 第二种方法执行顺序应该是: 
 加载类ExplicitStatic(在此期间会加载静态类Cups并实例化) --〉执行ExplicitStatic.main()方法  ....   
 所以Inside main()一个在前,一个在后 
------解决方案--------------------如果有静态域,会先初始化静态域的