• Java中构造代码块的使用


    例子1

    
    public class Client {
        {
            System.out.println("执行构造代码块1");
        }
    
        {
            System.out.println("执行构造代码块2");
        }
    
        public Client(){
            System.out.println("执行无参构造");
        }
    
        public Client(int i){
            System.out.println("执行有参构造1");
        }
        
        public static void main(String[] args) {
            new Client();
            new Client(5);
        }
    }
    
    执行构造代码块1
    执行构造代码块2
    执行无参构造
    执行构造代码块1
    执行构造代码块2
    执行有参构造1
    
    

    结论:在通过new关键字生成一个实例时会先执行构造代码块(相当于把构造块的代码插入到构造函数的最前端),然后再执行其他代码,也就是说:构造代码块会在每个构造函数内首先执行(需要注意的是:构造代码块不是在构造函数之前运行的,它依托于构造函数的执行),同时构造代码块的执行顺序为语句编写顺序。

    例子2

    
    public class Client {
        {
            System.out.println("执行构造代码块1");
        }
    
        {
            System.out.println("执行构造代码块2");
        }
    
        public Client(){
            System.out.println("执行无参构造");
        }
    
        public Client(int i){
            System.out.println("执行有参构造1");
        }
    
        public Client(String str){
            this();
            System.out.println("执行有参构造2");
        }
    
        public static void main(String[] args) {
            new Client();
            new Client(5);
            new Client("hello");
        }
    }
    执行无参构造
    执行构造代码块1
    执行构造代码块2
    执行有参构造1
    执行构造代码块1
    执行构造代码块2
    执行无参构造
    执行有参构造2
    
    

    结论:特殊情况-如果遇到this关键字(也就是构造函数调用自身其他的构造函数时)则不插入构造代码块,对于我们的例子来说,编译器在编译时发现String形参的构造函数调用了无参构造,于是放弃插入构造代码块,所以只执行了一次构造代码块.。
    延伸:在构造代码块的处理上,super方法没有任何特殊的地方,编译器只是把构造代码块插入到super方法之后执行而已

  • 相关阅读:
    每天改进一点点之改进日志收集系统 原创: 赵建鹏 雪球工程师团队 2018-03-23
    Locust
    ('' or 60)
    python动态获取对象的属性和方法 (转载)
    MySQL 8.0: From SQL Tables to JSON Documents (and back again)
    词典型 遍历键 顺序
    子系统权限栏目 自己生成 自己控制
    Redis 单线程却能支撑高并发
    OPPO数据中台之基石:基于Flink SQL构建实数据仓库
    技术干货丨如何在VIPKID中构建MQ服务
  • 原文地址:https://www.cnblogs.com/darange/p/12159843.html
Copyright © 2020-2023  润新知