Java instance initialization , for initializing non- static variables for each object.

The output shows that the instance initialization clause is executed before either one of the constructors.

// housekeeping/Mugs.java
// (c)2017 MindView LLC: see Copyright.txt
// We make no guarantees that this code is fit for any purpose.
// Visit http://OnJava8.com for more book information.
// Instance initialization

class Mug {
  Mug(int marker) {
    System.out.println("Mug(" + marker + ")");
  }
}

public class Mugs {
  Mug mug1;
  Mug mug2;

  { // [1]
    mug1 = new Mug(1);
    mug2 = new Mug(2);
    System.out.println("mug1 & mug2 initialized");
  }

  Mugs() {
    System.out.println("Mugs()");
  }

  Mugs(int i) {
    System.out.println("Mugs(int)");
  }

  public static void main(String[] args) {
    System.out.println("Inside main()");
    new Mugs();
    System.out.println("new Mugs() completed");
    new Mugs(1);
    System.out.println("new Mugs(1) completed");
  }
}
/* Output:
Inside main()

Mug(1)
Mug(2)
mug1 & mug2 initialized

Mugs()
new Mugs() completed

Mug(1)
Mug(2)
mug1 & mug2 initialized

Mugs(int)
new Mugs(1) completed
*/

ps: blank lines in comments are used to highlight constructor initialize oder.

change [1] code and its location, the code like:

// housekeeping/Mugs.java
// (c)2017 MindView LLC: see Copyright.txt
// We make no guarantees that this code is fit for any purpose.
// Visit http://OnJava8.com for more book information.
// Instance initialization

class Mug {
  Mug(int marker) {
    System.out.println("Mug(" + marker + ")");
  }
}

public class Mugs {
  Mug mug3;
  Mug mug4;

  Mugs() {
    System.out.println("Mugs()");
  }

  { // [1]
    mug3 = new Mug(3);
    mug4 = new Mug(4);
    System.out.println("mug3 & mug4 initialized");
  }

  Mugs(int i) {
    System.out.println("Mugs(int)");
  }

  public static void main(String[] args) {
    System.out.println("Inside main()");
    new Mugs();
    System.out.println("new Mugs() completed");
    new Mugs(1);
    System.out.println("new Mugs(1) completed");
  }
}
/* My Output:
Inside main()
Mug(3)
Mug(4)
mug3 & mug4 initialized
Mugs()
new Mugs() completed
Mug(3)
Mug(4)
mug3 & mug4 initialized
Mugs(int)
new Mugs(1) completed
*/

for better understand, please read below content.

see static explicit data initialization.

see initialization with inheritance.

references:

1. On Java 8 - Bruce Eckel

2. https://github.com/wangbingfeng/OnJava8-Examples/blob/master/housekeeping/Mugs.java

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值