静态代码块和构造器的执行顺序

来源:互联网 发布:linux java dlog.path 编辑:程序博客网 时间:2024/05/29 12:41

实例化一个类A的时候的执行顺序,

即:1 . 先执行代码块里的代码;

  2 . 然后执行非静态代码块;

  3 .最后才真正执行构造器里的代码。


Print.java

 1 package com.testStatic; 2  3 public class Print { 4     static{ 5         System.out.println("Print().static{}.....,肯定先执行到我....,比构造器还先执行到..."); 6     } 7     public Print(){ 8         System.out.println("Print(),空构造器。。。"); 9     }10     public void PrintW(){11         System.out.println("Print.PrintW(),我开始打印了。。。。");12     }13 }

StaticTest.java

 1 package com.testStatic; 2  3 public class StaticTest { 4     public StaticTest(){ 5         System.out.println("StaticTest.的StaticTest()构造器,"); 6     } 7     static{ 8         System.out.println("StaticTest.static{}.......,我应该是第一个执行,"); 9     }10     {11         System.out.println("StaticTest.的非静态代码块");12     }13     public void M1(){14         Print p = new Print();15         if(p!=null){16             System.out.println("p 已经实例化");17         }else{18             System.out.println("p 还没实例化");19         }20     }21     22     public void M2(){23         Print p2 = new Print();24         p2.PrintW();25         if(p2!=null){26             System.out.println("p2 已经实例化");27         }else{28             System.out.println("p2 还没实例化");29         }30         31     }32     public static void main(String[] args) {33         StaticTest s = new StaticTest();34         if(s!=null){35             System.out.println("s 已经实例化");36         }else{37             System.out.println("s还没实例化");38         }39         System.out.println("=====main()=====");40         s.M1();41         s.M2();42     }43 }

运行结果

StaticTest.static{}.......,我应该是第一个执行,
StaticTest.的非静态代码块
StaticTest.的StaticTest()构造器,

s 已经实例化
=====main()=====
Print().static{}.....,肯定先执行到我....,比构造器还先执行到...
Print(),空构造器。。。
p 已经实例化
Print(),空构造器。。。
Print.PrintW(),我开始打印了。。。。
p2 已经实例化

阅读全文
0 0
原创粉丝点击