欢迎访问宙启技术站
智能推送

Java函数JAVA中的构造函数和析构函数

发布时间:2023-06-21 23:05:25

Java中的构造函数和析构函数是两种重要的成员函数。构造函数是当一个对象被创建时被调用的函数,主要负责对象的初始化工作。而析构函数是当一个对象被销毁时被调用的函数,主要负责对象的清理工作。本文将详细介绍Java中的构造函数和析构函数。

1. 构造函数

每一个类中都有一个默认的构造函数,即没有任何参数的构造函数。当我们创建一个对象时,系统会默认调用这个类的默认构造函数。

如果我们在类中定义了构造函数,Java会优先调用我们自定义的构造函数。构造函数的作用是对象的初始化。在构造函数中,我们可以初始化对象的成员变量,以及执行一些必要的初始化操作。

Java中的构造函数有以下特点:

(1)构造函数的名称和类名称相同。

(2)构造函数没有返回值类型,连void都不需要。

(3)构造函数可以重载,即存在多个构造函数,它们具有不同的参数列表。

(4)如果我们没有定义构造函数,Java会默认为我们提供一个无参的构造函数。

下面是一个简单的例子,演示了一个Person类的构造函数的定义:

public class Person {

    String name;

    int age;

    public Person() {

        name = "张三";

        age = 18;

    }

    public Person(String name, int age) {

        this.name = name;

        this.age = age;

    }

    public static void main(String[] args) {

        Person p1 = new Person();

        Person p2 = new Person("李四", 20);

        System.out.println(p1.name + "-" + p1.age);

        System.out.println(p2.name + "-" + p2.age);

    }

}

在上面的例子中,Person类有两个构造函数。其中一个是无参构造函数,另一个是有参构造函数。在无参构造函数中,我们为Person对象的成员变量name赋值为“张三”,age赋值为18。在有参构造函数中,我们通过传入参数的方式初始化对象的成员变量name和age。在main方法中分别使用这两个构造函数创建了两个Person对象。

2. 析构函数

Java中没有析构函数。在Java中,垃圾回收器负责回收对象的内存,所以我们不需要手动销毁对象。当一个对象不再被引用时,Java会自动将其回收。

虽然Java中没有析构函数,但是我们可以使用finalize()方法来模拟析构函数的功能。finalize()方法是Object类中的一个方法,在对象被垃圾回收器回收之前,该方法会被自动调用。在finalize()函数中,我们可以执行一些必要的清理工作,例如关闭文件、释放资源等。

下面是一个简单的例子,演示了如何使用finalize()方法:

public class Car {

    String brand;

    public Car(String brand) {

        this.brand = brand;

    }

    @Override

    protected void finalize() throws Throwable {

        System.out.println(brand + "被销毁了");

    }

    public static void main(String[] args) throws InterruptedException {

        Car car = new Car("宝马");

        car = null; // 将car设置为null,让它成为垃圾对象

        System.gc(); // 立即调用垃圾回收器

        Thread.sleep(1000); // 暂停1秒

    }

}

在上面的例子中,我们创建了一个Car对象,并将其引用赋值给了变量car。接着,我们将car设置为null,使得它成为垃圾对象。然后,我们立即调用了垃圾回收器。在垃圾回收器回收car之前,系统会自动调用finalize()方法,输出“宝马被销毁了”。

总结:

Java中的构造函数和析构函数是两个非常重要的函数。构造函数主要负责对象的初始化工作,而析构函数主要负责对象的清理工作。在Java中,我们不需要手动调用析构函数,而是交由垃圾回收器来回收对象。如果需要执行一些必要的清理工作,可以使用Object类中的finalize()方法。