局部代码块
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("hejinjin"); 11 p2.speak(); 12 Person3 p3 = new Person3(238); 13 p3.speak(); 14 p1.show(); 15 { 16 17 int x = 10; 18 } 19 System.out.println("x="+x); 20 21 } 22 23 24 }
像这种的会出现错误,int x= 10是局部代码块,所以x只在大括号之内有用,除了这个大括号,x将不再起作用,局部代码块是写在main函数里面的。
构造代码块和局部代码块不同,构造代码块是写在类里面的。
package com_package2; public class Person4 { private int age; private String name; { System.out.println("伴随着创建对象而执行,对象创建一次执行一次"); } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } Person4() { System.out.println("haha"); } Person4(String name) { this.name = name; } Person4(String name,int age) { this.name = name; this.age = age; System.out.println("heihei"); } public void speak() { System.out.println("name="+this.name+" "+"age"+this.age); } }
package com_package2; public class Person4Demo { public static void main(String[]args) { Person4 p = new Person4(); Person4 p1 = new Person4("hejinjin",23); p1.speak(); } }
伴随着创建对象而执行,对象创建一次执行一次
haha
伴随着创建对象而执行,对象创建一次执行一次
heihei
name=hejinjin age23
注意观察结果:会发现,伴随着创建对象,这种构造代码块执行,创建一次对象就执行一次构造代码块!
构造代码块:可以给所有对象进行初始化
构造函数:是对对应的对象进行初始化。
举一个例子来说:每一个婴儿生下来都会哭,如果
写一个类:
package com_package2; public class Person4 { private int age; private String name; Person4() { System.out.println("haha"); cry(); } Person4(String name,int age) { this.name = name; this.age = age; cry(); } Person4(String name) { this.name = name; cry(); } public void speak() { System.out.println("name="+this.name+"age="+this.age); } public void cry() { System.out.println("哇哇······"); } }
package com_package2; public class Person4Demo { public static void main(String[]args) { Person4 p = new Person4(); p.speak(); Person4 p1 = new Person4("hejinjin",34); p1.speak(); Person4 p2 = new Person4("hejinjin"); } }
haha
哇哇······
name=nullage=0
哇哇······
name=hejinjinage=34
哇哇······
在这里也就是说,每次创建对象的时候都,为了让婴儿哭,那么在每个构造方法里面都要调用一次cry()函数,这样岂不是非常麻烦,所以构造代码块将改变这种现状
package com_package2; public class Person4 { private int age; private String name; { System.out.println("哇哇······"); } Person4() { System.out.println("haha"); //cry(); } Person4(String name,int age) { this.name = name; this.age = age; //cry(); } Person4(String name) { this.name = name; //cry(); } public void speak() { System.out.println("name="+this.name+"age="+this.age); } //public void cry() //{ //} }
package com_package2; public class Person4Demo { public static void main(String[]args) { Person4 p = new Person4(); p.speak(); Person4 p1 = new Person4("hejinjin",34); p1.speak(); Person4 p2 = new Person4("hejinjin"); } }
哇哇······
haha
name=nullage=0
哇哇······
name=hejinjinage=34
哇哇······
结果是一样的,构造代码块的作用也就在这里。但是构造代码块一定记得加大括号