zoukankan      html  css  js  c++  java
  • java 初始化块

    1. class Bike8{  
    2.     int speed;  
    3.       
    4.     Bike8(){System.out.println("constructor is invoked");}  
    5.    
    6.     {System.out.println("instance initializer block invoked");}  
    7.        
    8.     public static void main(String args[]){  
    9.     Bike8 b1=new Bike8();  
    10.     Bike8 b2=new Bike8();  
    11.     }      

    In the above example, it seems that instance initializer block is firstly invoked but NO. Instance intializer block is invoked at the time of object creation. The java compiler copies the instance initializer block in the constructor after the first statement super(). So firstly, constructor is invoked. Let's understand it by the figure given below:

    instance initializer block

    Rules for instance initializer block :

    There are mainly three rules for the instance initializer block. They are as follows:
    1. The instance initializer block is created when instance of the class is created.
    2. The instance initializer block is invoked after the parent class constructor is invoked (i.e. after super() constructor call).
    3. The instance initializer block comes in the order in which they appear.

    class A {
    A() {
    System.out.println("parent class constructor invoked");
    }
    }

    class Test extends A {
    Test() {
    super();
    System.out.println("child class constructor invoked");
    }

    {
    System.out.println("instance initializer block is invoked");
    }

    public static void main(String args[]) {
    Test b = new Test();
    }
    }

    输出:

    parent class constructor invoked
    instance initializer block is invoked
    child class constructor invoked

    class A {
    A() {
    System.out.println("parent class constructor invoked");
    }
    }

    class Test extends A {
    Test() {
    super();
    System.out.println("child class constructor invoked");
    }

    Test(int a) {
    super();
    System.out.println("child class constructor invoked " + a);
    }

    {
    System.out.println("instance initializer block is invoked");
    }

    public static void main(String args[]) {
    Test b1 = new Test();
    Test b2 = new Test(10);
    }
    }

    输出:

    parent class constructor invoked
    instance initializer block is invoked
    child class constructor invoked
    parent class constructor invoked
    instance initializer block is invoked
    child class constructor invoked 10

  • 相关阅读:
    .Net简单上传与下载
    C语言课程设计——电影院订票系统
    Git学习笔记
    浅析RPO漏洞攻击原理
    网络1911、1912 C语言第5次作业循环结构 批改总结
    MOCTF WriteUp
    Visual Studio 2019/2017 安装使用教程(快速上手版)
    南京邮电大学网络攻防平台——WriteUp(持续更新)
    java大作业博客购物车
    .Net Framework 2.0 的System.Data.SqlClient.AddWithValue()方法
  • 原文地址:https://www.cnblogs.com/smile0120/p/5465923.html
Copyright © 2011-2022 走看看