《Head First Java》20200927读书笔记

P245-

《Head First Java》20200927读书笔记

Duck的简易饲养方法

一定要有不需参数的构造函数。

如果Duck的构造函数需要一项参数会怎样?
上一页的Duck只有一个构造函数,且它需要一个int型的size参数。
想象一个你可以让用户在创建Duck时有两个选项:一个可以指定Duck的大小(通过构造函数的参数),另外一个使用默认值而无需指定大小。
你无法只依靠单一的构造函数就能够很清楚地达到这个目的。
要记得,如果某个方法或构造有一项参数,你就必须在调用该方法或构造函数的时候传入适当的参数。
你没有办法作出一种没给参数时,就使用默认值的方法,因为在这个情况下,没有给参数就无法通过编译程序。

public class Duck{
	int size;

	public Duck(int newSize){
		if(newSize == 0){//如果参数值为0就使用默认的大小
			size = 27;
		}else{
			size = newSize;
		}
	}
}

你需要两种方法来创建出新的Duck:

public class Duck2{
	int size;

	public Duck2(){
		//指定默认值
		size = 27;
	}

	public Duck2(int duckSize){
		//使用参数设定
		size = duckSize;
	}
}

知道大小时:

Duck2 d = new Duck2(15);

不知道大小时:

Duck2 d2 = new Duck2();

因此这会需要两个构造函数来分辨两种选项。
一个需要参数,另外一个不需要参数。
如果一个类有一个以上的构造函数,这代表它们也是重载的。

重载与默认的构造函数

编译器一定会帮你写出没有参数的构造函数吗?
No!

如果你已经写了一个有参数的构造函数,并且你需要一个没有参数的构造函数,则你必须自己动手写!
如果类有一个以上的构造函数,则参数一定要不一样。
这就包括了参数的顺序与类型,只要是不一样就可以。

重载构造函数的意思代表你有一个以上的构造函数且参数都不相同

要点

  • 实例变量是保存在所属的对象,位于堆上。
  • 如果实例变量是个对对象的引用,则引用与对象都是在堆上。
  • 构造函数是个会在新建对象的时候执行程序代码。
  • 构造必须与类同名且没有返回类型。
  • 你可以用构造函数来初始被创建对象的状态。
  • 如果你没有写构造函数,编译器会帮你安排一个。
  • 默认的构造函数是没有参数的。
  • 如果你写了构造函数,则编译器就不会调用。
©️2020 CSDN 皮肤主题: 游动-白 设计师:上身试试 返回首页