zoukankan      html  css  js  c++  java
  • 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方法之后执行而已

  • 相关阅读:
    CentOS7使用集群同步脚本对文件同步分发
    CentOS7安装jdk1.8
    CentOS7+CDH5.12.1集群搭建
    nginx通配符
    Nginx反向代理及配置
    一些好玩有用的书签
    linux操作小技巧锦集
    系统压测结果对比:tomcat/thinkphp/swoole/php-fpm/apache
    python修改linux日志(logtamper.py)
    【原创】给定随机数的取值范围(最小值、最大值),且要求多次取得的随机数最后的结果有一个固定的平均值
  • 原文地址:https://www.cnblogs.com/darange/p/12159843.html
Copyright © 2011-2022 走看看