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了。

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

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

  1. [javase学习笔记]-8.8 构造代码块

    这一节我们再看一个特殊的代码块.那就是构造代码块. 这里我们简单的通过样例来说明一下: class Person { private String name; { System.out.println ...

  2. java基础-静态,非静态(构造)代码块,类加载

    static block and non-static block(constructor block) [toc] 想来想去,先来一题比较好 public class Foo { public st ...

  3. Android(java)学习笔记68:同步代码块 和 同步方法 的应用

    1. 同步代码块 和 同步方法 代码示例: (1)目标类,如下: package cn.himi.text; public class SellTicket implements Runnable { ...

  4. Android(java)学习笔记8:同步代码块 和 同步方法 的应用

    1. 同步代码块 和 同步方法 代码示例: (1)目标类,如下: package cn.himi.text; public class SellTicket implements Runnable { ...

  5. [javase学习笔记]-8.7 静态代码块

    这一节我们看一个比較特殊的概念,那就是静态代码块. 前面我们也提到过代码块,就是一段独立的代码空间.那么什么是静态代码块呢?说白了,就是用statickeyword修饰的代码块. 我们来看一个样例: ...

  6. 【学习笔记】python的代码块(吐槽)

    曾经我以为python是像pascal那样begin开始end结束, 直到今天…… 我才知道python是用缩进作为代码段标识的…… >>> def test(n): ... if ...

  7. C++学习笔记(9)----关于变量和数组大小的一道容易出错的面试题

    一道容易出错的C++笔试题 求下面代码的输出内容: int main(int argc,char* argv[]) { char str1[]="Hello"; char* str ...

  8. java基础8 构造函数和构造代码块

    一.构造函数 1 构造函数的作用 给对应的对象进行初始化. 2 构造函数的格式 修饰符 函数名(形式参数){ //函数名就是类名 函数体 } 举例说明: class Perosn{ private i ...

  9. Java中静态代码块、构造代码块、构造函数、普通代码块

    在Java中,静态代码块.构造代码块.构造函数.普通代码块的执行顺序是一个笔试的考点,通过这篇文章希望大家能彻底了解它们之间的执行顺序. 1.静态代码块 ①.格式 在java类中(方法中不能存在静态代 ...

  10. 【原】Java学习笔记017 - 面向对象

    package cn.temptation; public class Sample01 { public static void main(String[] args) { // 继承关系中的pri ...

随机推荐

  1. 3. 关于sql注入的综合题

    关于sql注入的综合题                          ----------南京邮电大学ctf : http://cms.nuptzj.cn/ 页面上也给了好多信息: 根据这个sm. ...

  2. phpstudy配置php7.1.11

    php7.1.11下载地址 http://windows.php.net/download/ 下载之后,解压. 重名的为php-7.1.11-nts 移动到phpStudy的php目录下 然后重启ph ...

  3. python列表逆序三种方法

    栗子: # 题目:将一个数组逆序输出. # # 程序分析:用第一个与最后一个交换. import random list =[random.randint(0,100) for _ in range( ...

  4. 【并发编程】一文带你读懂深入理解Java内存模型(面试必备)

    并发编程这一块内容,是高级资深工程师必备知识点,25K起如果不懂并发编程,那基本到顶.但是并发编程内容庞杂,如何系统学习?本专题将会系统讲解并发编程的所有知识点,包括但不限于: 线程通信机制,深入JM ...

  5. 第七篇 .NET高级技术之关于相等 Equals

    查看判断两个对象是否是同一个对象要用:object.ReferenceEquals(); 因为“==”默认值是比较两个对象是不是同一个对象.所以有时候两个对象的内容相等,但是比较后还是false. O ...

  6. Continuous Integration

    https://dzone.com/articles/continuous-delivery-toolchain

  7. SublimeText3 snippet 编写总结

    SublimeText3 snippet 编写总结 SublimeText的snippet定义功能也十分强大, 类似VAssist. 在菜单tool->New Snippet中定义.  打开后显 ...

  8. Win7系统控制面板“设备和打印机”打不开解决办法

    Win7系统控制面板“设备和打印机”打不开解决办法, 打开时显示界面如下: 可能原因: 1.设备和打印机对应的驱动故障引起无法打开的问题 2.服务未开启 3.系统文件损坏 解决方法: 1.更新驱动.可 ...

  9. Linux —— ps命令

    Ps命令 作用 显示瞬间进程的状态,并不动态连续: 如果想对进程进行实时监控应该用top命令: 对进程的管理,可以使用kill命令发送信号 Ps PID : 运行着的命令的进程编号 TTY : 命令所 ...

  10. Jmeter4.0----编写测试脚本(5)

    1.说明 以HTTP请求为例,和小伙伴门分享一下jmeter测试脚本的基本编写步骤 2.步骤说明 第一步:打开jmeter,更改测试计划名称为 Test batchSignForDir(修改计划名称, ...