J2SE综合:高手帮你全面理解初始化顺序

上一篇 / 下一篇  2007-12-28 09:13:00 / 个人分类:JAVA

 

例子:

  1. class A{
  2.     public String context=test();
  3.     public static int num=getNum();
  4.     {
  5.         System.out.print("A3");
  6.     }
  7.     static{
  8.         System.out.print("A1,");
  9.     }
  10.     public A(){
  11.         System.out.print("A2,");
  12.     }
  13.     public String test()
  14.     {
  15.         String str="A.test(),";
  16.         System.out.print(str);
  17.         return str;
  18.     }
  19.     public static int getNum()//它只属于A
  20.     {
  21.         System.out.print("A.getNum(),");
  22.         return 11;
  23.     }
  24. }
  25. class B extends A{
  26.     {
  27.         System.out.print("c");
  28.     }
  29.     static{
  30.         System.out.print("a,");
  31.     }
  32.     public B(){
  33.         System.out.print("b,");
  34.     }   
  35.     public String test()//覆盖
  36.     {
  37.         String str="B.test(),";
  38.         System.out.print(str);
  39.         return str;
  40.     }
  41.     public static int getNum()//它只属于B,不能覆盖
  42.     {
  43.         System.out.print("B.getNum(),");
  44.         return 21;
  45.     }
  46. }
  47. public class InitTest{
  48.     public static void main(String[] ars){
  49.         new B(); //执行到此处,结果: A.getNum(),A1,a,B.test(),A3A2,cb,
  50.         System.out.println();
  51.         new B(); //执行到此处,结果: B.test(),A3A2,cb,
  52.  }
  53. }


首先在加载类时初始化static变量,同时按定义的顺序执行static{}块;
然后初始化按定义的顺序初始化非static变量;
最后执行构造函数;

以上的每个步骤都是先执行父类部分,再执行子类部分;

TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2008-09-10  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 1923
  • 日志数: 60
  • 建立时间: 2007-03-16
  • 更新时间: 2008-07-11

RSS订阅

Open Toolbar