这一节我们再看一个特殊的代码块。那就是构造代码块。

这里我们简单的通过样例来说明一下:

class Person
{
private String name;
{
System.out.println("Person类的第一个代码块被运行");
} Person()
{
System.out.println("无參数构造函数被运行");
this.name = "小宝宝";
}
Person(String name)
{
System.out.println("有name參数构造函数被运行");
this.name = name;
}
public void speak()
{
System.out.println("名字:"+name);
}
} class ConBlockTest
{
public static void main(String[] args)
{
Person p1 = new Person();
p1.speak();
Person p2 = new Person("小科比");
p2.speak();
}
}

我们在这个样例中看到了Person类中有一个代码块,它没有被statickeyword修饰,这就是我们这一节所说的构造代码块,为什么这么说呢,我们看运行结果:

我们非常显然就看到了在我们创建两个对象时,该代码块都被运行了。而构造函数仅仅是当创建相应对象时被调用。

所以构造代码块的作用就是:给全部对象进行同样部分的初始化。

而我们的构造方法是对相应的对象进行有针对性的独特的初始化。

那么构造代码块的构造函数哪个先运行呢?我们看代码:

class Person
{
private String name; {//第一个构造代码块
System.out.println("Person类的第1个代码块被运行");
} Person()
{
System.out.println("无參数构造函数被运行");
this.name = "小宝宝";
}
Person(String name)
{
System.out.println("有name參数构造函数被运行");
this.name = name;
}
public void speak()
{
System.out.println("名字:"+name);
} {//第二个构造代码块
System.out.println("Person类的第2个代码块被运行");
}
}

我们看结果:

我们看到两个不同位置的构造代码块都在构造函数被运行之前就已经运行了。所以说构造代码块优先于构造函数运行。


所以,当我们须要把全部对象都有同样的初始化时,我们能够使用构造代码块来实现。比方上面的样例中,人一出生都会哭,那么我们就能够用构造代码块来初始哭这个功能:

class Person
{
private String name; {
cry();
} Person()
{
this.name = "小宝宝";
}
Person(String name)
{
this.name = name;
}
public void cry()
{
System.out.println("哇哇");
}
public void speak()
{
System.out.println("名字:"+name);
}
}

这样我们就把全部对象哭的功能封装到了一个构造代码块中。在创新对象是会优先运行,非常好的实现了我们想要的功能。

[javase学习笔记]-8.8 构造代码块的更多相关文章

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

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

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

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

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

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

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

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

  5. Android(java)学习笔记188:关于构造代码块,构造函数的一道面试题(华为面试题)

    1.源码是: package text; public class TestStaticCon { public static int a = 0; static { a = 10; System.o ...

  6. 【Java学习笔记之十七】Java中普通代码块,构造代码块,静态代码块区别及代码示例分析

    //执行顺序:(优先级从高到低.)静态代码块>mian方法>构造代码块>构造方法. 其中静态代码块只执行一次.构造代码块在每次创建对象是都会执行. 1 普通代码块 //普通代码块:在 ...

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

    1. 代码实例: package text; public class TestStaticCon { public static int a = 0; static { a = 10; System ...

  8. java学习(一)静态代码块 构造代码块 构造方法的执行顺序及注意问题

    今天我总结了一下java中静态代码块 构造代码块 构造方法的执行顺序及其注意问题 首先要知道静态代码块是随着类的加载而加载,而构造代码块和构造方法都是随着对象的创建而加载 当时做了这么一个小案例(想必 ...

  9. Java学习之代码块(静态,构造代码块,构造方法)执行顺序

    静态代码块   static{ 代码 } 随着类的加载而加载,随类的消失而消失,存在于类中,方法外,最先执行,且只加载1次,可用来加载驱动及初始化对象属性. 构造代码块   {   } 也存在于类中, ...

随机推荐

  1. ZOJ 3556

    终于做出来了,激动.... 这道题隐藏得深啊,但若推导下来,就变简单了. 首先,一个集合的子集的个数为2^n=s.注意了,题目求的是有序集合组,并且每个集合是可以重复使用的,怎么办呢?这就要想到多重集 ...

  2. android AudioManager AUDIOFOCUS

    如今開始做音乐播放器的模块.遇到了几个问题 当播放音乐的过程中,去调节音量或者情景模式中的铃声设置,结果会有两种声音同一时候响起. 引起此问题的解决办法是音乐焦点问题没弄清 现分析一下音乐焦点的几个属 ...

  3. Android BLE与终端通信(三)——client与服务端通信过程以及实现数据通信

    Android BLE与终端通信(三)--client与服务端通信过程以及实现数据通信 前面的终究仅仅是小知识点.上不了台面,也仅仅能算是起到一个科普的作用.而同步到实际的开发上去,今天就来延续前两篇 ...

  4. 关于Javakeywordsynchronized——单例模式的思考

    精彩的设计模式盛宴刚刚落下帷幕.三天的时间.真是学习到了非常多.当中,遗留的非常多的问题.今天就谈谈synchronized这个keyword.关于对synchronizedkeyword的思考是从单 ...

  5. DevExpress TreeList控件的复选框

    作者:jiankunking 出处:http://blog.csdn.net/jiankunking TreeList控件能够同一时候显示树结构和其它数据列,即在一个列上建立父子关系展开或收缩,同一时 ...

  6. hdu 2604 Queuing (矩阵高速幂)

    Queuing Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total S ...

  7. 除了信号触发线程与接收者线程相同的情况能直接调用到slot,其它情况都依赖事件机制(解决上面代码收不到信号的问题其实很简单,在线程的run();函数中添加一个事件循环就可以了,即加入一句exec();),信号槽不就是一个回调函数嘛

    MainWindow::MainWindow(QWidget *parent) :   QMainWindow(parent)   {   pThreadCon = new CSerialThread ...

  8. node08---Express框架

    一.Express框架 Express框架是后台的Node框架,所以和jQuery.zepto.yui(雅虎的).bootstrap都不一个东西. Express在后台的受欢迎的程度,和jQuery一 ...

  9. string的一些操作

    //str.insert(1, "bbb"); //str.erase(5);//删除5以后的数字 //str.erase(str.begin()+2);//删除某个字符 //co ...

  10. flex布局下img变形的问题

    flex-shrink  加上:flex-shrink:0:定义了缩小比例,默认为1,即如果空间不足,项目将会缩小所有项目为1时,空间不足,都会缩小,如果你不希望某个容器在任何时候都不被压缩,那设置f ...