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方法之后执行而已

  • 相关阅读:
    jmeter-可视化的非GUI模式
    深度剖析阶梯负载与最终请求数
    安全测试基础2-sqlmap演练
    百度压测,分析性能拐点
    性能测试-服务端瓶颈分析思路
    性能测试中的常见异常分析(转载整理)
    jmeter_遍历转换浮点时间戳
    性能测试-实例讲解VU、RPS、RT公式换算
    利用Docker安装Web前端性能测试工具Sitespeed.io
    基于 Jmeter 的 web 端接口自动化测试平台(转载)
  • 原文地址:https://www.cnblogs.com/darange/p/12159843.html
Copyright © 2011-2022 走看看