P242-
《Head First Java》20200926读书笔记
构造新的Duck
构造Duck
构造函数的一项关键特征,是它会在对象能够被赋值给引用之前就执行。
这代表你可以有机会在对象被使用之前介入。
也就是说,在任何人取得对象的遥控器前,对象有机会对构造过程给予协助。
在Duck的构造函数中,我们没有作出什么有意义的事情,但还是有展示出事件的顺序。
构造函数让你有机会可以介入new的过程
public class Duck{
public Duck(){
System.out.println("Quack");//列出一行呱叫
}
}
public class UseADuck{
public static void main(String[] args){
Duck d = new Duck();//这样会启动Duck的构造函数
}
}
新建Duck状态的初始化
大部分的人都是使用构造函数来初始化对象的状态。
也就是说,设置和给对象的实例变量赋值。
public Duck(){
size = 34;
}
可以使用该类的setSize()来设定大小。
但这会让Duck暂时处于没有大小数值的状态(实例变量没有默认值),且需要两行才能搞定。
public class Duck{
int size;//实例变量
public Duck(){
System.out.println("Quack");
}
public void setSize(int newSize){
size = newSize;
}
}
public class UseDuck{
public static void main(String[] args){
Duck d = new Duck();
//问题出在这里,Duck在此处已经建立。
//但是却没有size值!你必须依赖Duck的用户记得设定大小。
问:既然编译器会帮你写,那为何还要自己写构造函数?
答:如果你在创建对象时,需要有程序代码帮忙初始化,那你就得自己编写构造函数。例如你说你需要通过用户的输入来完成对象的创建。另外一个原因与父类的构造函数有关。
问:如何分辨构造函数和方法?
答:Java可以有与类同名的方法而不会变成构造函数。其中的差别在于是否有返回类型。构造函数不会有返回类型。
对象状态初始化
使用构造函数来初始化Duck的状态
如果某种对象不应该在状态被初始化之前就使用,就别让任何人能够在没有初始化的情况下取得该种对象。