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. 关于JSP页面中的pageEncoding和contentType两种属性的区别

    转自:http://blog.csdn.net/dragon4s/article/details/6604624 JSP指令标签中<%@ page contentType="text/ ...

  2. 如何在VS2015中使用Git命令提示符

    本文转载自 http://qkxue.net/info/176223/Visual-Studio-Git VS2015自带了Git插件,但有时候觉得Git控制台命令更方便些.VS中本身不能把Git B ...

  3. go语言中将函数作为变量传递

    在Go中函数也是一种变量,我们可以通过type来定义它,它的类型就是所有拥有相同的参数,相同的返回值的一种类型,函数当做值和类型在我们写一些通用接口的时候非常有用,通过下面这个例子我们可以看到test ...

  4. 初探 Nginx 架构

    转载自:http://wiki.jikexueyuan.com/project/nginx/nginx-framework.html Nginx 在启动后,在 unix 系统中会以 daemon 的方 ...

  5. SpringMVC入门 bug集锦X3和SSM原始整合

  6. hls流媒体视频防盗实现

    HLS流媒体视频防盗实现 一.Windows安装FFmpeg 1.1 安装版本 1.1.1 网址:https://ffmpeg.org/ 1.1.2 选择Windows版本:https://ffmpe ...

  7. JS高级学习历程-4

    4 执行环境可以访问什么变量 具体可以访问变量类型:局部变量.参数.函数.外部环境变量 优先级:局部变量 > 函数 > 参数 > 外部环境变量 <!DOCTYPE html&g ...

  8. [HNOI2017]抛硬币

    Description 小A和小B是一对好朋友,他们经常一起愉快的玩耍.最近小B沉迷于××师手游,天天刷本,根本无心搞学习.但是已经入坑了几个月,却一次都没有抽到SSR,让他非常怀疑人生.勤勉的小A为 ...

  9. Uva12210-A Match Making Problem

    对于每个数字二分找到大于等于它的数,再暴力找到第一个小于它的数 #include<bits/stdc++.h> #define inf 0x3f3f3f3f ; using namespa ...

  10. 中间件注册可以除了可以使用Startup之外,还可以选择StartupFilter

    中间件注册可以除了可以使用Startup之外,还可以选择StartupFilter 中间件的注册除了可以借助Startup对象(DelegateStartup或者ConventionBasedStar ...