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

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

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

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类中有一个代码块,它没有被static关键字修饰,这就是我们这一节所说的构造代码块,为什么这么说呢,我们看运行结果:

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

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

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

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

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

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

时间: 2024-12-21 13:19:24

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

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

这一节我们再看一个特殊的代码块.那就是构造代码块. 这里我们简单的通过样例来说明一下: 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)

静态代码块、构造代码块、构造函数的执行

1 public class Str { 2 3 static { 4 System.out.println("static{1}"); 5 } 6 static { 7 System.out.println("static{2}"); 8 } 9 { 10 System.out.println("{}"); 11 } 12 13 Str() { 14 System.out.println("Str()"); 15 } 16

Java中的构造代码块

代码块 ----a静态代码块 ----b构造代码块 ----c普通代码块 执行顺序:(优先级从高到低.)静态代码块>mian方法>构造代码块>构造方法. a.静态代码块: 静态代码块在加载该类的时候执行,且只执行一次! 1 class Test{ 2 public static void main(String args[]) 3 { 4 Demo d1=new Demo();Demo d2=new Demo(); 5 6 } 7 } 8 9 class Demo{ 10 static{

局部代码块和构造代码块

局部代码块 1 package com_package2; 2 3 public class Person3Demo { 4 public static void main(String[]args) 5 { 6 Person3 p = new Person3(); 7 p.speak(); 8 Person3 p1 = new Person3("hejinjin",23); 9 p1.speak(); 10 Person3 p2 = new Person3("hejinji