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

  • 相关阅读:
    python爬虫学习之MongoDB学习笔记
    python基础学习笔记
    基于python的turtle模块画国旗
    基于tkinter的gui编程基础学习笔记
    python爬虫实现各视频网站vip付费电影下载
    网页模板收藏
    python爬虫实战项目
    python爬取詹姆斯职业生涯数据并生成图标展示
    爬虫框架scrapy学习笔记
    基于python的OpenCV图像处理学习笔记
  • 原文地址:https://www.cnblogs.com/darange/p/12159843.html
Copyright © 2011-2022 走看看