zoukankan      html  css  js  c++  java
  • 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了

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

  • 相关阅读:
    解决“此计算机上已安装了试用版。必须先卸载以前安装的试用版后才能安装另一个试用版。”
    Windows 7 快捷键
    【译】部署Asp.Net MVC 网站到Winodws Azure
    jqGrid专题:搜索
    jqGrid专题:格式化数据
    jqGrid专题:事件文档
    jqGrid专题:方法文档
    jqGrid专题:数据加载
    jqGrid专题:参数文档
    jqGrid专题:jqGrid原理
  • 原文地址:https://www.cnblogs.com/hebao0514/p/4751988.html
Copyright © 2011-2022 走看看