Java 对象初始化

  Java 学习之的对象初始化的讲究
java在初始化的时候也有很多讲究,因为java中出现了类,所以在初始化的时候就有可能使用到创建新对象,所以,对于初始化的顺序要求的比较严格,请看下面一个程序,是thinking in java中的一个程序,被我稍加改编,这样可以更好的说明几个初始化的要点:  
  class Cup   
  {  
      Cup(int marker)   
      {  
         System.out.println("Cup(" + marker + ")");  
      }  
      void f(int marker)   
      {  
         System.out.println("f(" + marker + ")");  
      }  
  }  
  class Cups   
  {  
      static Cup c1=new Cup(1);  
      Cup c3=new Cup(3);  
      static Cup c2= new Cup(2);  
      Cups()  
      {  
         System.out.println("Cups()");  
      }  
      Cup c4=new Cup(4);  
  }  
  public class ExplicitStatic   
  {  
      Cups c=new Cups();                                                // 6   
      {  
         System.out.println("Hello");                         // 7   
      }  
      public static void main(String[] args)   
      {  
         System.out.println("Inside main()");           // 2   
         Cups.c1.f(99);                                                // 3   
         ExplicitStatic x=new ExplicitStatic();             // 4   
      }  
      static Cups x = new Cups();                                     // 1   // 5   
  }  
  大家可以手动执行一下这个程序,考虑一下结果是什么,然后参照下面的答案对照一下,看看是否正确:  
  Cup(1)  
  Cup(2)  
  Cup(3)  
  Cup(4)  
  Cups()  
  Inside main()  
  f(99)  
  Cup(3)  
  Cup(4)  
  Cups()  
  Hello  
  我总结了四个初始化的要点,如下:  
  1、如果有static,即静态成员定义,首先初始化static的变量,如,在类Cups中c3在c2前面,可是在输出的结果中,你可以发现,c2是在c3前执行的,这就是因为,所有的static都在第一时间被初始化。
  2、Static只初始化一次,在第二次创建类的对象的时候,就不会去执行static的语句,如,在第二次执行new Cups()的时候,就只输出了Cup(3)和Cup(4),显然,static的两个创建对象的语句没有做。  
  3、变量的初始化在方法前。如,在Cups类中,方法Cups()在语句Cup c4=new Cup(4)之前,可是输出结果的时候,打印的Cups()却在Cup(4)之后。  
  4、在含有main的类中执行顺序是先做static,然后就是main,而不是像其它类一样,除了static就按顺序做下来。如,在main函数中,如果去掉语句ExplicitStatic x=new ExplicitStatic(),则Cups c=new Cups()和System.out.println("hello")都不会执行。另外,留个小问题,如果去掉了System.out.println("hello")外的括号会怎么样呢?
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值