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了。
这里的考点应该是:构造代码块只会执行一次。在构造函数中调用构造函数,无论怎么调用最终都会有一个构造函数去执行构造代码块。
Android(java)学习笔记131:关于构造代码块,构造函数的一道面试题(华为面试题)的更多相关文章
- [javase学习笔记]-8.8 构造代码块
这一节我们再看一个特殊的代码块.那就是构造代码块. 这里我们简单的通过样例来说明一下: class Person { private String name; { System.out.println ...
- java基础-静态,非静态(构造)代码块,类加载
static block and non-static block(constructor block) [toc] 想来想去,先来一题比较好 public class Foo { public st ...
- Android(java)学习笔记68:同步代码块 和 同步方法 的应用
1. 同步代码块 和 同步方法 代码示例: (1)目标类,如下: package cn.himi.text; public class SellTicket implements Runnable { ...
- Android(java)学习笔记8:同步代码块 和 同步方法 的应用
1. 同步代码块 和 同步方法 代码示例: (1)目标类,如下: package cn.himi.text; public class SellTicket implements Runnable { ...
- [javase学习笔记]-8.7 静态代码块
这一节我们看一个比較特殊的概念,那就是静态代码块. 前面我们也提到过代码块,就是一段独立的代码空间.那么什么是静态代码块呢?说白了,就是用statickeyword修饰的代码块. 我们来看一个样例: ...
- 【学习笔记】python的代码块(吐槽)
曾经我以为python是像pascal那样begin开始end结束, 直到今天…… 我才知道python是用缩进作为代码段标识的…… >>> def test(n): ... if ...
- C++学习笔记(9)----关于变量和数组大小的一道容易出错的面试题
一道容易出错的C++笔试题 求下面代码的输出内容: int main(int argc,char* argv[]) { char str1[]="Hello"; char* str ...
- java基础8 构造函数和构造代码块
一.构造函数 1 构造函数的作用 给对应的对象进行初始化. 2 构造函数的格式 修饰符 函数名(形式参数){ //函数名就是类名 函数体 } 举例说明: class Perosn{ private i ...
- Java中静态代码块、构造代码块、构造函数、普通代码块
在Java中,静态代码块.构造代码块.构造函数.普通代码块的执行顺序是一个笔试的考点,通过这篇文章希望大家能彻底了解它们之间的执行顺序. 1.静态代码块 ①.格式 在java类中(方法中不能存在静态代 ...
- 【原】Java学习笔记017 - 面向对象
package cn.temptation; public class Sample01 { public static void main(String[] args) { // 继承关系中的pri ...
随机推荐
- MVC动态生成的表单:表单元素比较多 你就这样写
MVC动态生成的表单:表单元素比较多 你就这样写: public ActionResult ShoudaanActionResult(FormCollection from,T_UserM user) ...
- win10彻底关闭自动更新
第1步 https://jingyan.baidu.com/article/9faa7231e7b78b473c28cbb6.html 第2步 http://www.360doc.com/conten ...
- cf813C(bfs)
题目链接:http://codeforces.com/problemset/problem/813/C 题意:给出一颗树,开始时两个人 Alice 和 Bob 分别站在 1(树根)和 x 处.此后每一 ...
- docker中容器和镜像的区别
自学docker过程中一直搞不明白 镜像容器的关系,网上查阅看到一篇文章觉得讲的很好,转载记录. 转自 http://blog.csdn.net/chszs/article/details/48252 ...
- [Xcode 实际操作]六、媒体与动画-(16)实现音乐的背景播放
目录:[Swift]Xcode实际操作 本文将演示音乐的背景播放功能 打开项目信息配置文件[info.plist]. 需要在配置文件中进行一些操作,使程序支持音乐的背景播放. 点击鼠标右键,弹出右键菜 ...
- Vue实现选项卡效果
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8& ...
- Python学习笔记(数据处理)
处理文件中数据 (统计分数) 看一下我们的文档里的数据: #-- scores.txt 刘备 23 35 44 47 51 关羽 60 77 68 张飞 97 99 89 91 诸葛亮 100 1.先 ...
- 洛谷P1002 过河卒
关于蒟蒻的我,刚刚接触DP.... 那么就来做一道简单DP吧.... 首先先看题: 题目描述 棋盘上AA点有一个过河卒,需要走到目标BB点.卒行走的规则:可以向下.或者向右.同时在棋盘上CC点有一 ...
- IBM Websphere MQ常用命令及常见错误
MQSC: MQ Script Command (不区分大小写) 注明: 下面命令行中的队列管理器名字,队列名字分别用QmgrName, QName替代. 下面标蓝色的,都需要根据实际配置更改! 打 ...
- Jmeter 的 vars 和 props 用法
meter 的 JSR223 控件是 代替 BeanShell 的新一代脚本控件,支持多种脚本语言,尤其是其中的 Groovy,更是重点推荐使用的脚本语言,本文研究其中的 vars 和 props 两 ...