对于JAVA对象的创建,我们使用这样的语句:Object myObj = new Object(); 它实际分为三个步骤:
1. Object myObj — 分配存储空间并创建一个引用变量。
2. new Object() — 创建一个Object对象。
3. = — 将创建的对象引用赋值给 myObj 这个引用变量。
在上边的第二个步骤,当我们使用了 new 这个关键词时,实际上是做了额外的一些工作来创建我们需要的对象,我们调用了 Object 对象的构造方法。构造方法与类同名,并且不能定义返回值类型,例如 Object 类的构造方法可能为:
public Object() { // 这里做一些初始化对象的操作 } public Object(int size, String name) { // 这里做一些类似将size 与 name赋值给实例变量等初始化对象的操作 // 从这两个构造方法可以看出,构造方法可以带参数,并且在一个类中可以存在多个构造方法,只要它们符合重载的条件即可。 // 符合重载的条件分为两点:参数的个数不同,相同位置上的参数的类型不同 } public Object(String name, int size) { // 这个构造函数与上一个是两个不同的构造函数,因为他们满足重载的条件 }
构造方法类似一个类的普通方法,但是它并不是类的普通方法,构造方法并没有定义返回值类型,而类的方法是必须定义返回值类型的,这是它与普通类方法的唯一区别。 很多时候在我们编写一个类时可能并没有手动编写一个构造方法,但它的确存在,因为 JVM 会自动对没有定义构造方法的类添加一个不带参数的空的构造方法。
为什么系统已经为我们添加了构造方法,我们还需要来创建自己的构造方法?构造方法最大的作用就是让我们新创建的的对象在使用前被完整的初始化,想象一个Dog类,它有一个private int height; 实例变量,如果没有构造方法,它刚刚被创建为对象时height值默认是0的,这样我们就有了一个0高度的狗狗,显然这样不好。所以我们需要使用构造函数来初始化我们的对象,例如:
public class Dog { int height; public Dog() { height = 30; } // 当我们添加了自己的构造方法后,系统将不再为我们手动添加不带参数的构造函数 // 这样当我们的类的使用者使用不带参数的构造方法创建对象时会产生错误,所以一般情况下建议 // 为类添加一个不带参数的构造方法,并在其中给类的一些重要的实例变量一个默认值。 public Dog(int newHeight) { height = newHeight; } // 对不带参数的构造方法的重载 } public class TestDog { Dog myDog = new Dog(40); System.out.print ( myDog.height ); }