关闭

构造器的执行顺序

发表于:2012-5-17 09:35

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:彭sir    来源:51Testing软件测试网采编

  2、如果在子类和父类中存在静态块;执行顺序有会是怎么样的了?

  答,静态块会在构造器之前运行。不管是子类还是父类。创建一个对象的时候,会首先加载它的静态块。

  1. Father.java  
  2. public class Father {  
  3.    
  4.     //静态块  
  5.     static{  
  6.         System.out.println("father  static ");  
  7.     }  
  8.        
  9.     public Father(){  
  10.         System.out.println("我是父类的无参构造器");  
  11.     }  
  12.        
  13.     public Father(String username){  
  14.         System.out.println("我是父类有参构造器,传过来的参数是+"+username);  
  15.     }  
  16. }  
  17.    
  18. SonDemo.java  
  19. public class SonDemo extends Father{  
  20.     //静态块  
  21.     static{  
  22.         System.out.println("sonDemo static ");  
  23.     }  
  24.        
  25.     public SonDemo(){  
  26.         System.out.println("我是--子类--的无参构造器");  
  27.     }  
  28.     public SonDemo(String username){  
  29.         System.out.println("我是子类的有参构造器,参数是"+username);  
  30.     }  
  31.        
  32.     public void sys(){  
  33.         System.out.println("我是子类的sys方法");  
  34.     }  
  35.        
  36.     public static void main(String[] args) {  
  37.         SonDemo son = new SonDemo();  
  38.     }  
  39. }

  ① 程序的结果:

father static
sonDemo static
我是父类的无参构造器
我是--子类--的无参构造器

  因为在创建子类对象之前:会创建父类的一个对象,而静态块会在main之前被加载,所以两个类的静态块首先执行。

  然后执行构造器。

  ② 如果在子类中的main中只创建父类的对象结果是怎么样的呢?

  打印结果:

father static
sonDemo static
我是父类的无参构造器

  为什么子类的静态块会被加载了?是因为我们是在SonDemo中测试,如果在其他类中测试就不会打印。

  总结:我们说了这么多就是重要的一点。静态块会在构造器器之前执行。

22/2<12
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号