Java类——深入构造器

一、使用构造器

\quad 构造器是一个特殊的方法,用于创建类的实例。Java语言中构造器是创建对象的重要途经,因此,Java类必须包含一个或一个以上的构造函数。
\quad 构造器最大的用处就是在创建对象时执行初始化,当创建一个对象时,系统为这个对象的属性进行默认初始化+将所有的基本类型设为0或false,将所有的引用类型设置为null。我们可以在构造器中改变这种默认的初始化,如下面程序所示:

public class TestConstructor {
    public String name;
    public int count;
    public TestConstructor(String name, int count)
    {
        this.name = name;
        this.count = count;
    }
    public static void main(String[] args)
    {
        TestConstructor tc = new TestConstructor("程序员宝典", 20000);
        System.out.println(tc.name);
        System.out.println(tc.count);
    }
}
程序员宝典
20000

\quad 运行上面程序,将看到输出TestConstructor对象时,其中的name属性不再是null,count属性也不再是0,这就是自定义构造器的作用。
\quad 如果用户希望该类保留无参数的构造器,或者希望有多个初始化过程,则可以为该类提供多个构造器,就形成了构造器的重载。通常建议为Java类保留无参数的默认构造器,因此,如果为一个类编写了有参数的构造器,也要为其编写一个无参数的构造器。

二、构造器的重载

\quad 同一个类中具有多个构造器,多个构造器的形参列表不同,即被称为构造器的重载。构造器重载允许Java类中包含多个初始化逻辑,从而允许不同的构造器来初始化Java对象。构造器重载方法与普通方法一样。如下程序所示:

public class TestConstructor {
    public String name;
    public int count;
    public TestConstructor() {}  // 无参数的构造器
    public TestConstructor(String name, int count)
    {
        this.name = name;
        this.count = count;
    }
    public static void main(String[] args)
    {
        TestConstructor tc1 = new TestConstructor("程序员宝典", 20000);
        System.out.println(tc1.name);
        System.out.println(tc1.count);

        TestConstructor tc2 = new TestConstructor();
        System.out.println(tc2.name);
        System.out.println(tc2.count);
    }
}
程序员宝典
20000
null
0

\quad 如果一个类中有多个构造器,而其中一个构造器知兴替完全包含于另一个构造器的执行体。假设构造器B中完全包含了构造器A,我们可以在B中调用方法A,但A不能用new关键字来调用,因为一旦使用该关键字将会导致系统重新创建一个对象。为了在B中能调用A中的初始化代码,又不会创建一个新的Java对象,可以使用this关键字来调用相应的构造器。如下程序所示:

public class TestConstructor {
    public String name;
    public int count;
    public double weight;
    public TestConstructor() {}
    public TestConstructor(String name, int count)
    {
        this.name = name;
        this.count = count;
    }
    public TestConstructor(String name, int count, double weight)
    {
        this(name, count);  // this关键字调用两个参数的构造器
        this.weight = weight;
    }
    public static void main(String[] args)
    {
        TestConstructor tc = new TestConstructor("程序员宝典", 20000, 65.0);
        System.out.println(tc.name);
        System.out.println(tc.count);
        System.out.println(tc.weight);
    }
}
程序员宝典
20000
65.0

\quad 有人可能会问:为什么要用this来调用另一个重载的构造器?我把另一个构造器中的代码复制粘贴到这个构造器中不就可以了吗?
\quad 如果仅仅从功能上看确实如此,不过如果以后一旦要维护,那么每个构造器里的都要修改,很麻烦。这样的话就只需要维护部分构造器即可,降低维护成本。

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页