我们可以在自定义类中的构造函数中调用构造函数,但是有一定的规则。
先看如下例子:
public class Flower { int petalCount = 0; String s = "initial value."; Flower(int petals) { petalCount = petals; System.out.println("Constructor w/ int arg only, petalCount = " + petalCount); } Flower(String ss) { s = ss; System.out.println("Constructor w/ String arg only, s = " + s); } Flower(String ss, int petals) { this(ss); //s = ss; //this(petals); Can't call two. petalCount = petals; System.out.println("String & int args"); } Flower() { this("hi", 24); System.out.println("Default Constructor."); } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Flower f = new Flower(); System.out.println(f.s); System.out.println(f.petalCount); } }
output:
Constructor w/ String arg only, s = hi
String & int args
Default Constructor.
hi
24
还记得我之前写的,在C++语言中构造函数调用构造函数。在这一方面,C++和Java是截然不同的。以后利用的时候千万不要搅浑了。
总结:
1. 尽管可以用this()调用一个构造函数,但却不能调用两个。此外,必须将构造函数调用置于最起始处,否则编译会报错。
2. 除了可以在构造函数中调用构造函数以外, 编译器禁止在其他方法中调用构造函数。