[javase学习笔记]-8.8 构造代码块
这一节我们再看一个特殊的代码块。那就是构造代码块。
这里我们简单的通过样例来说明一下:
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 构造代码块的更多相关文章
- [javase学习笔记]-8.7 静态代码块
这一节我们看一个比較特殊的概念,那就是静态代码块. 前面我们也提到过代码块,就是一段独立的代码空间.那么什么是静态代码块呢?说白了,就是用statickeyword修饰的代码块. 我们来看一个样例: ...
- 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 { ...
- 【学习笔记】python的代码块(吐槽)
曾经我以为python是像pascal那样begin开始end结束, 直到今天…… 我才知道python是用缩进作为代码段标识的…… >>> def test(n): ... if ...
- Android(java)学习笔记188:关于构造代码块,构造函数的一道面试题(华为面试题)
1.源码是: package text; public class TestStaticCon { public static int a = 0; static { a = 10; System.o ...
- 【Java学习笔记之十七】Java中普通代码块,构造代码块,静态代码块区别及代码示例分析
//执行顺序:(优先级从高到低.)静态代码块>mian方法>构造代码块>构造方法. 其中静态代码块只执行一次.构造代码块在每次创建对象是都会执行. 1 普通代码块 //普通代码块:在 ...
- Android(java)学习笔记131:关于构造代码块,构造函数的一道面试题(华为面试题)
1. 代码实例: package text; public class TestStaticCon { public static int a = 0; static { a = 10; System ...
- java学习(一)静态代码块 构造代码块 构造方法的执行顺序及注意问题
今天我总结了一下java中静态代码块 构造代码块 构造方法的执行顺序及其注意问题 首先要知道静态代码块是随着类的加载而加载,而构造代码块和构造方法都是随着对象的创建而加载 当时做了这么一个小案例(想必 ...
- Java学习之代码块(静态,构造代码块,构造方法)执行顺序
静态代码块 static{ 代码 } 随着类的加载而加载,随类的消失而消失,存在于类中,方法外,最先执行,且只加载1次,可用来加载驱动及初始化对象属性. 构造代码块 { } 也存在于类中, ...
随机推荐
- React入门基础
1-react概念: React是一个用于构建用户界面的JavaScript库.React主要用于构建UI,很多人认为React是MVC中的V(视图).React起源于Facebook的内部项目.Re ...
- 模块打包机--webpack--基础使用
什么是webpack? 作用有哪些? WebPack可以看做是模块打包机:它做的事情是,分析你的项目结构,找到JavaScript模块以及其它的一些浏览器不能直接运行的拓展语言(Scss,Type ...
- js 对象的创建方式和对象的区别
js一个有三种方法创建对象,这里做一个总结. 1.对象直接量 所谓对象直接量,可以看做是一副映射表,这个方法也是最直接的一个方法,个人比较建议, 1 2 3 4 5 6 7 8 9 10 11 12 ...
- SpringAOP之CGLIB字节码增强
SpringAOP的基础原理就是动态代理 有两种实现方式:1)jdk动态代理 2)cglib动态代理 jdk动态代理和cglib动态代理的区别在于: cglib没有接口(通过继承父类) 只有实现类. ...
- Nutch命令大全
Nutch采用了一种命令的方式进行工作,其命令可以是对局域网方式的单一命令也可以是对整个Web进行爬取的分步命令.主要的命令如下: 1. Crawl Crawl是"org.apache.nu ...
- Spring boot 使用@Value注入属性
Spring boot 使用@Value注入属性 学习了:http://blog.csdn.net/hry2015/article/details/72353994 如果启动的时候报错: spring ...
- [SCSS] Pure CSS for multiline truncation with ellipsis
1. Pure CSS 2. Responsive 3. No need to recalculate on resize or font’s load event 4. Cross browser
- [CSS3] The different of Background-size between 'cover' and 'contain'
'cover': The smaller axies of image (x axies) should match smaller axies (x axies) of container. So ...
- 棋盘覆盖问题python3实现
在2^k*2^k个方格组成的棋盘中,有一个方格被占用,用下图的4种L型骨牌覆盖全部棋盘上的其余全部方格,不能重叠. 代码例如以下: def chess(tr,tc,pr,pc,size): globa ...
- doT.js的使用
引言 doT.js可以更好的在html端使用json数据. {{ }} for evaluation 模板标记符 {{= }} for interpolation 输出显示,默认变量名叫it {{! ...