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

  • 相关阅读:
    布局
    JS基础回顾_滚动条
    JS基础回顾_Dom
    JS语法_其他
    JS语法_类型
    一些免费的API
    CSS特效(一)
    博客园在Markdown中使用JS
    C# 聊一聊屏保的设置 第一步 注册表
    2019 力扣杯-全国高校春季编程大赛 最长重复子串
  • 原文地址:https://www.cnblogs.com/darange/p/12159843.html
Copyright © 2011-2022 走看看