构造代码块

package test1;

class person_3 {
	private int age;
	private String name;

	person_3() {
		System.out.println("age:" + age + "  name: " + name);
	}

	person_3(int i) {
		age = i;
		System.out.println("age:" + age + "  name: " + name);
	}

	person_3(int i, String s) {
		age = i;
		name = s;
		System.out.println("age:  " + age + "   name:   " + name);
	}

	{
		cry();
	}

	public void cry() {
		System.out.println("孩子哭了!");
	}
}

public class shiyan {
	public static void main(String[] args) {
		person_3 p1 = new person_3();
		person_3 p2 = new person_3(15);
		person_3 p3 = new person_3(12, "zhangsan");
	}
}


上述代码中展示的是构造函数的方式,但是同时在代码中存在一个笔试时常见的问题,就是方法体中的

{  
	cry(); 
}
在这段代码中没有任何的提示,不像方法有方法名,但是在执行的结果中我们可以看到
孩子哭了! 
age:0  name: null 
孩子哭了! 
age:15  name: null
 孩子哭了! 
age:  12   name:   zhangsan
他确实执行了代码中的cry()方法。那么这是什么呢?答案是:构造代码块。这个概念在实际的应用中并不常见,但是在笔试中却很多,问题的方式有:让你说一下程序中的代码运行的顺序、让你说出该段代码的作用。
这说这个之前我,我们首先要搞明白一点就是什么是构造函数。在我们建立对象时,与之对应的构造函数就会被调用,注意是“与之对应的构造函数”,这有牵扯到一个问题,就是构造函数有几种?在我们的类中,如果我们没有为类建立构造函数,那么系统会自己创建一个空的构造函数,但是如果我们自己创建的有的话,不管合适不合适,系统都不在为我们创建构造函数了,例如在函数中我们创建了如下的构造函数
package test1;
public class shiyan{  
	private int age;  
	shiyan(int i){     
	age = i;   
	System.out.println("name"+age); 
 	}  
	public static void main(String[] args){ 
 		 Person p = new Person(); 
 	} 
}


在类中我们创建了Person(int i)这个构造函数,则系统默认不会给我们创造了,在执行语句的时候会出现如下错误:
Person.java:8: 找不到符号 符号: 构造函数 Person() 位置: 类 Person                 Person p = new Person();                 
        ^ 1 错误
因为我们在执行到Person p = new Person()时,并没有找到构造函数的存在;
说了这么多,有人会问构造函数到底有什么用呢?其实构造函数就是用于给对象进行初始化的,每个类在对象建立的同时,构造函数就在运行了,目的是给对象进行初始化。那么我们应该在什么时候定义构造函数,什么时候使用默认的呢?当我们在对事物进行分析时,如果发现事物存在具备一些特性或者行为时,那么我们就可以定义构造函数了,并把这些内容定义在构造函数中。
现在回到开始的那个问题,构造代码块有什么用?它的作用其实很简单,和构造函数一样,也是为对象进行初始化用的,共同点是在对象一建立的时候他们都在运行,但是他们的区别在于:构造代码块要优先于构造函数执行,同时,构造代码块是给所有对象进行统一的初始化,而构造函数则是给对应的对象进行初始化,就像在首段代码中,我们在进行Person p1 = new Person(15);的时候,会运行Person(int i){、、、、、}这个构造函数,在在进行person_2 p3 = new person_2(12, "zhangsan");这个的时候,则系统会运行person_2(int i, String s) {、、、、}这个构造函数,也就是所谓的“给对应的对象进行初始化",然而,不管是运行哪段代码,构造数码块是必须首先运行的,即"构造代码块是给所有对象进行统一的初始化“















  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值