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. 7.12实习培训日志 Linux Docker

    Linux 管理 RHEL7 的用户和组 用户的属性修改 chage -l [username] #查看用户信息 usermod --expiredate=YYYY-MM-DD [username] ...

  2. 以交互方式将文本添加到图形中(matlab)

    这篇博客记录一下怎么用matlab在图形中简单的添加一些文本,以直方图均衡化为例.先看几张图片吧,第一幅是较暗的花粉的电子显微图像和对应的直方图,第二幅是其直方图均衡化的图像和对应的直方图,第三幅是对 ...

  3. 一、初识mybatis

    orm框架 1.配置文件(配置别名.mapper xml文件.数据库连接.事务) 2.创建SqlSessionFactory,创建SqlSession 3.创建model,创建Mapper xml文件 ...

  4. js转义字符

    \"   \/   \" 例: span = "<span onclick=\"xadmin.open('编辑','\/junyi\/member\/up ...

  5. ue4 打个log难如狗

    注意: 把log相关两个宏写到类中,并编译后,在输出日志的位置的Categories关键字过滤的位置看不到自己的标签是因为需要先运行一次,输出一些这个标签的log后,这个自定义的标签才会显示在这 原文 ...

  6. CentOS 安装配置vncserver

    yum 安装tiger vncserver yum install tigervnc-server 安装后输入 vncserver 设置密码 3.配置用户 vim /etc/sysconfig/vnc ...

  7. 坑爹的 Java 可变参数,把我整得够惨。。

    最近在写一个功能点,用了 Java 中的可变参数,真是把我搞得够惨.. 什么是可变参数? 就是方法参数用 Object... args 三个点形式,一个参数可以接收多个参数. 实际的代码就不帖了,来看 ...

  8. 剑指Offer的学习笔记(C#篇)-- 二叉树的下一个节点(好理解版本)

    题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. 一 . 理解题意 该题目我们可以借鉴一个非常影响不好的 ...

  9. 3分钟了解HTTP的基础概念

    1. 什么是HTTP? HTTP意为超文本传输协议(HyperText Transfer Protocol), Web以此为规范发送请求.获取资源,完成从客户端到服务器端的一些列操作. 2. 如何理解 ...

  10. PAT甲级——1105 Spiral Matrix (螺旋矩阵)

    此文同步发布在CSDN:https://blog.csdn.net/weixin_44385565/article/details/90484058 1105 Spiral Matrix (25 分) ...