When are initializations outside a constructor called?

前端 未结 2 989
有刺的猬
有刺的猬 2021-01-13 19:51

Suppose I have

class MyObject
{
    Object object1 = new Object();
    Object object2;

    public MyObject()
    {
        object2 = new Object();
    }

           


        
2条回答
  •  梦谈多话
    2021-01-13 20:10

    If you want to confirm behavior, use javap or a similar tool to inspect the bytecode. Though Jon is correct, refer to the specification as a first port of call.

    Compiled from "MyObject.java"
    class MyObject {
      java.lang.Object object1;
    
      java.lang.Object object2;
    
      public MyObject();
        Code:
           0: aload_0
           1: invokespecial #11               // Method java/lang/Object."":()V
           4: aload_0
           5: new           #3                // class java/lang/Object
           8: dup
           9: invokespecial #11               // Method java/lang/Object."":()V
          12: putfield      #13               // Field object1:Ljava/lang/Object;
          15: aload_0
          16: new           #3                // class java/lang/Object
          19: dup
          20: invokespecial #11               // Method java/lang/Object."":()V
          23: putfield      #15               // Field object2:Ljava/lang/Object;
          26: return
    

提交回复
热议问题