• Android(java)学习笔记131:关于构造代码块,构造函数的一道面试题(华为面试题)


    1. 代码实例:

    package text;
    
    public class TestStaticCon {
        
        public static int a = 0;
        
        static {
            a = 10;
            System.out.println("静态代码块在执行a="+a);
        }
        
        {
            a = 8;
            System.out.println("非静态代码块在执行a="+a);
        }
        
        public TestStaticCon() {
            this("带参构造方法在执行a="+a);
            System.out.println("无参构造方法在执行a="+a);
            
        }
        
        public TestStaticCon(String n) {
            System.out.println(n);
            System.out.println(a);
        }
    
        public static void main(String[] args) {
            TestStaticCon tsc = null ;
            System.out.println("!!!!!!!!!!!");
            tsc = new TestStaticCon();
        }
    
    }

    程序运行的结果如下:

    (1)TestStaticCon tsc = null; 类进内存,开始进行类的初始化动作,有静态成员,静态先做初始化
    (2)输出了 !!!!!!!!!!
    (3)tsc = new TestStaticCon();

           ♦ 进入无参的构造方法;这里是关键点了!!! 

           ♦ 执行了this("带参构造方法在执行a=" + a);这里就是原因所在了,这时a的值任然是上一次static代码块执行时赋予的10 

           ♦ 进入了带参数的构造函数,而参数 String n已经记录了this("带参构造方法在执行a=" + a);中的字符串参数。也就意味着这里a的值已经被固定了,因为它已经是一个String了 

           ♦ 这时进入了构造代码块,也就是非static代码块,在这里 a = 8;然后输出 “非静态代码块在执行a=8“ 

           ♦ System.out.println(n);执行,记住这里输出的是String类型了,与 a 已经无关了 

           ♦ 回到无参的构造方法中执行System.out.println("无参构造方法在执行a=" + a); 这里的 a 是经过在 构造代码块中赋值为 8 的 a了

    这里的考点应该是:构造代码块只会执行一次。在构造函数中调用构造函数,无论怎么调用最终都会有一个构造函数去执行构造代码块

  • 相关阅读:
    Redis 代理 twemproxy
    redis sentinel 集群监控 配置
    RabbitMQ 消息队列 配置
    codis 新版本 CodisLabs 编译安装
    CentOS7 开源跳板机(堡垒机) Jumpserver
    tomcat 优化配置 java-8 tomcat-7
    CentOS 7 安装配置 NFS
    CentOS 7 x64 安装 Ceph
    自动化运维 Ansible
    Java之数据类型讲解
  • 原文地址:https://www.cnblogs.com/hebao0514/p/4751988.html
Copyright © 2020-2023  润新知