首页 > 编程笔记 > Java笔记 阅读:26

Java构造方法的使用(附带实例)

在 Java 中,成员变量都是在对象建立之后,由相应的方法来对其赋值。如果一个对象在被创建时就完成所有的初始化工作,将会非常简洁。

Java 提供了一个特殊的成员方法——构造方法。构造方法是一种特殊的方法,分为无参构造方法和有参构造方法两种,用来在对象被创建时初始化成员变量。

构造方法有如下 3 个特征:
接下来,通过案例来演示如何定义类的无参构造方法。
class Dog {
    public Dog() { // 无参构造方法
        System.out.println("狗类的构造方法自动被调用");
    }
}

public class Demo {
    public static void main(String[] args) {
        System.out.println("声明对象:Dog d = null");
        Dog d = null; // 声明对象时不调用构造方法
        System.out.println("实例化对象:d = new Dog()");
        d = new Dog(); // 实例化对象时调用构造方法
    }
}
程序的运行结果如下:

声明对象:Dog d = null
实例化对象:d = new Dog()
狗类的构造方法自动被调用

从程序运行结果可发现,当使用关键字 new 实例化对象时才会调用构造方法。

细心的读者会发现,在之前的案例中并没有定义构造方法,但是也能被调用。这是因为类未定义任何构造方法,系统会自动提供一个默认构造方法。但是,如果已存在带参数的构造方法,则系统将不会提供默认构造方法。

接下来,通过案例来演示如何定义类的有参构造方法。
class Dog {
    private String name;    // 声明名字私有属性
    private int age;        // 声明年龄私有属性

    public Dog(String str, int n) { // 有参构造方法
        name = str;
        age = n;
    }

    public void show() { // 定义显示信息的方法
        System.out.println("名字:" + name + ",年龄:" + age);
    }
}

public class Demo {
    public static void main(String[] args) {
        Dog d = new Dog(); // 这里应该是Dog d = new Dog("名字", 年龄);
        d.show();
    }
}
程序编译报错,提示“Expected 2 arguments but found 0”,中文含义为“期待 2 个参数,但是发现 0 个”,出现错误的原因在于,类中已经提供有参数的构造方法,系统将不会提供无参构造方法,编译器因找不到无参构造方法而报错。

修改第 17 行代码如下:
Dog d = new Dog("旺财", 5);
程序的运行结果下:

名字:旺财,年龄:5

从程序运行结果可发现,实例化对象时调用了有参构造方法为属性赋值。

再次强调,只有当类没有任何构造方法时,系统才会提供无参构造方法。编写程序时,为避免出现编译错误,每次定义类的构造方法时,预先定义一个无参的构造方法,有参的构造方法可以根据需求再定义。

相关文章