[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);
	}
}

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

原文地址:https://www.cnblogs.com/llguanli/p/8428328.html

时间: 2024-08-27 12:19:16

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

[javase学习笔记]-7.15 构造代码块

这一节我们再看一个特殊的代码块,那就是构造代码块. 这里我们简单的通过例子来说明一下: class Person { private String name; { System.out.println("Person类的第一个代码块被执行"); } Person() { System.out.println("无参数构造函数被执行"); this.name = "小宝宝"; } Person(String name) { System.out.p

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

这一节我们看一个比較特殊的概念,那就是静态代码块. 前面我们也提到过代码块,就是一段独立的代码空间.那么什么是静态代码块呢?说白了,就是用statickeyword修饰的代码块. 我们来看一个样例: class StaticBlock { static { System.out.println("静态代码块被运行"); } void myPrint() { System.out.println("myPrint方法运行"); } } class StaticBloc

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

1 package cn.itcast_11; 2 3 public class SellTicket implements Runnable { 4 5 // 定义100张票 6 private static int tickets = 100; 7 8 // 定义同一把锁 9 private Object obj = new Object(); 10 private Demo d = new Demo(); 11 12 private int x = 0; 13 14 //同步代码块用obj

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

曾经我以为python是像pascal那样begin开始end结束, 直到今天-- 我才知道python是用缩进作为代码段标识的-- 1 >>> def test(n): 2 ... if n==1: 3 ... print("one") 4 ... print("two") 5 ... elif n==2: 6 ... print("three") 7 ... else: 8 ... print("four"

java学习中,匿名函数、构造方法、构造代码块、构造方法中调用构造方法(java 学习中的小记录)

java学习中,匿名函数.构造方法.构造代码块.构造方法中调用构造方法(java 学习中的小记录) 作者:王可利(Star·星星) 匿名函数 匿名对象:没有名字的对象 匿名对象使用的注意点: 1.一般不会用匿名对象给属性赋值,无法获取属性值,每次new 都是一个新的对象. 2.匿名对象永远都不可能是一个对象. 如:person new().name = "星星":是不行的 匿名对象的好处:书写简单. 匿名对象使用的场景: 1.如果一个对象调用一个方法一次的时候,就可以用匿名对象来调用.

Java 代码块,普通代码块,构造代码块,静态代码块

学习Java中… 刚刚学到了Java的代码块,虽然很简单 还是记下吧! 左音 2016-03-16 ----------------- // 执行优先级:静态代码块 > mian方法 > 构造代码块 > 构造方法 // 静态代码块不论是否实例化都会执行一次,不会重复执行 // 构造代码块实例化时执行 1.普通代码块 // 普通代码块在方法或语句中 1 public class CodeBlock { 2 3 public static void main (String[] args)

Java中的静态代码块和构造代码块

最近一在回顾Java中的一些知识,这里跟大家一起学习一下静态代码块,和构造代码块. 首先,代码就是巴拉巴拉一些定义呀,赋值啊,运算的一些java代码,用两个大括号括起来,就变成了神奇的代码块 { a=3; } static{ b=4; } 就像上面那个样子. 括号加了static修饰就变成了静态代码块,大家记住哦,只要加了static这个东西只后,后面那个东东就是静态的,而且只能操作静态的东东. 比如静态方法,静态变量,静态指针,当然java里没有指针. 然后我用了一个小代码去理解这两个概念,上

JavaSE8基础 父子类中都有静态代码块与构造代码块,执行顺序的简单示例

os :windows7 x64    jdk:jdk-8u131-windows-x64    ide:Eclipse Oxygen Release (4.7.0)        代码: //父类 class Father { //静态代码块 static { System.out.println("父类的静态代码块"); } //构造代码块 { System.out.println("父类的构造代码块"); } public Father() { System.

JavaSE8基础 构造代码块简单示例

os :windows7 x64    jdk:jdk-8u131-windows-x64    ide:Eclipse Oxygen Release (4.7.0) 代码: class Test { //在类中的成员位置,多个构造函数的公共代码放在这里面 { //构造代码块中 //对象进行初始化 会调用 System.out.println("调用构造函数时,构造代码块中的代码先执行"); } public Test() { System.out.println("无参数构