Java中的构造器与垃圾回收

构造器

在我们初始化对象时,如果希望设置一些默认值,那么就可以使用构造器,在Java中,构造器使用和类同名的名字且没有返回值,如下

class Test{
    private String name;
    Test(String n){
        name = n;
    }
    public String getName(){
        return name;
    }
}

public class app {
    public static void main(String[] args){
        Test test = new Test("小王");
        String n = test.getName();
        System.out.println(n);
    }
}

// 小王

并且可以发现这个构造器是在new的时候执行的。如果是继承至某个父类,那么我们可以在子类中调用super来手动执行父类中的构造器。

class Test{
    private String name;
    Test(String n){
        name = n;
    }
    public String getName(){
        return name;
    }
}

class Test2 extends Test{
    Test2(String n){
        super(n);
    }
}

public class app {
    public static void main(String[] args){
        Test2 test = new Test2("老王");
        String n = test.getName();
        System.out.println(n);
    }
}

// 老王

前面之所以说是手动是因为,就算你不去调用父类的构造器,它还是会被执行,只是它执行的是没有参数的构造器。我们不妨来看看下面这段代码

class Test{
    Test(){
        System.out.println("Test");
    }
}

class Test2 extends Test{
    Test2(){
        System.out.println("Test2");
    }
}

public class app {
    public static void main(String[] args){
        Test2 test = new Test2();
    }
}

// Test
// Test2

不竟程序自动调用了父类的构造器,而且还比子类构造器先执行,之所以父类的构造器先执行是有原因的,你想啊,子类往往需要用到父类中的一些变量或方法,如果不先初始化父类中的构造器,那么肯定就会出现一些问题。

垃圾回收

我们知道一个方法,可以无数次的被调用,因此如果没有一个合理的规范,那么每次执行都会加大内存的消耗,而且有些方法执行完毕以后就没有任何意义了,因此一些语言中加入了垃圾回收,对于一些没有用处的进行回收,当然垃圾回收不仅仅针对方法。

但是话说回来你也不能乱回收对吧,得有一个规范,而这个规范就是,如果一个对象没有被引用,或被设置成null,又或者当前对象被其他对象所覆盖,那么它就会变成垃圾,会被垃圾收集器所回收。

原文地址:https://www.cnblogs.com/pssp/p/6305721.html