这一章节我们来聊聊创建与初始化对象。
这个需要讨论的问题源自于c语言,在c语言中,很大部分的错误是忘记了初始化某些东西,他把库的构建的使用需要完成两个操作-创建与初始化,但是在java里面,使用构造器来创建与初始化,他们是在一起的,因此避免了一部分忘记初始化的错误。
package com.ray.testobject;
public class Test {
public static void main(String[] args) {
TestClass t1=new TestClass();
TestClass t2=new TestClass(1);
}
}
class TestClass {
public TestClass() {
System.out.println("TestClass created");
}
public TestClass(int param) {
System.out.println("TestClass created");
System.out.println(param);
}
}
输出:
TestClass created
TestClass created
1
从输出结果我们可以看到,其实在创建对象的时候我们利用构造器已经进一步的进行初始化,而不需要特定的运行初始化函数。
如果构造器不传入任何参数,那么,就会创建一个没有任何属性的对象。
需要注意的是:即便我们没有对对象初始化属性,编译器也会为我们初始化,这样就可以减少一定的错误。
我们修改一下上面的代码:
package com.ray.testobject;
public class Test {
public static void main(String[] args) {
TestClass t1 = new TestClass();
TestClass t2 = new TestClass(1);
}
}
class TestClass {
private String name;//增加属性
private int id;//增加属性
public TestClass() {
System.out.println("TestClass created");
System.out.println(id);
System.out.println(name);
}
public TestClass(int param) {
System.out.println("TestClass created");
System.out.println(param);
System.out.println(id);
System.out.println(name);
}
}
TestClass created
0
null
TestClass created
1
0
null
从输出结果可以看见,对象在初始化的时候,已经把里面的属性初始化。
我们再来修改一下程序,然后看看构造器初始化的参数与对象初始化的参数两者之间有什么不同。
package com.ray.testobject;
public class Test {
public static void main(String[] args) {
TestClass t1 = new TestClass();
TestClass t2 = new TestClass("1");
}
}
class TestClass {
private String name;
public TestClass() {
System.out.println("TestClass created");
System.out.println(name);
}
public TestClass(String param) {//修改了param 的类型
System.out.println("TestClass created");
System.out.println(param);
System.out.println(name);
}
}
输出:
TestClass created
null
TestClass created
1
null
因为如果需要使用具有param构造器来构造对象,必须初始化param,因此,param是认为的设置,而name这个属性域,则是由编译器自动初始化。
总结:这一章节讨论了创建与初始化对象的一些话题。
这一章节就到这里,谢谢。
-----------------------------------