构造代码块

来源:互联网 发布:淘宝车牌选号 编辑:程序博客网 时间:2024/05/16 19:13
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) {、、、、}这个构造函数,也就是所谓的“给对应的对象进行初始化",然而,不管是运行哪段代码,构造数码块是必须首先运行的,即"构造代码块是给所有对象进行统一的初始化“

	
				
		
原创粉丝点击