java—下面代码段中this()的用途?

ua4mk5z4  于 2021-07-05  发布在  Java
关注(0)|答案(3)|浏览(297)

这个问题在这里已经有答案了

this()和this(4个答案)
4个月前关门了。

package test;

public class Employee {
    String name;
    int age;

    Employee() {}

    Employee(String newName, int newAge) {
        this();
        name = newName;
        age = newAge;
    }

    public static void main(String args[]) {
        Employee e = new Employee("N", 43);
        System.out.println();
    }    
}

在上面的代码中,除了作为从重载构造函数调用无参数构造函数的示例外,从有用性的Angular 来看,重载构造函数中“this()”的实际意义是什么?

41ik7eoe

41ik7eoe1#

要调用默认构造函数,请使用this()。

flvlnr44

flvlnr442#

在那个片段里?
什么都没有。
任何构造函数的顶部必须有 this() 打电话,或者 super() 打电话。你不能不。如果编写失败,javac将注入: super(); 对于您来说,如果这是无效的(例如,您的超类没有protected+no args构造函数),那么您的代码将无法编译。
这就是粘贴的代码片段和假设的代码片段之间的区别 this(); 已删除。desugaring,你可以得到:

desugared,没有this():

package test;

public class Employee {
    String name;
    int age;

    Employee() {
        super(); // invokes java.lang.Object's no-args, which does nothing.
    }

    Employee(String newName, int newAge) {
        super(); // invokes java.lang.Object's no-args, which does nothing.
        name = newName;
        age = newAge;
    }
}

用这个():

package test;

public class Employee {
    String name;
    int age;

    Employee() {
        super(); // invokes java.lang.Object's no-args, which does nothing.
    }

    Employee(String newName, int newAge) {
        this();
        name = newName;
        age = newAge;
    }
}

现在,注射,比如说,一个 System.out.println("Hello!"); 在no-args构造函数中与现在有一个小的区别:与 this() ,你会看到的 Hello! 印刷的,没有它,你就不会。不管怎样,您最终都会调用超类的构造函数,因为这是必须发生的事情,不管怎样(只有java.lang.object不需要,在vm中硬编码;对象没有超类)。

dfty9e19

dfty9e193#

对我来说这是个错误的方向。
this()的典型用法是在参数中没有提供构造函数时为构造函数提供默认值,因为您不能直接调用构造函数。调整代码,例如:
Package 试验;

public class Employee {
    String name;
    int age;

Employee() {
    this("Default", 42);
}

Employee(String newName, int newAge) {
    name = newName;
    age = newAge;
}

public static void main(String args[]) {
    Employee e = new Employee();
    System.out.println();
}

}

相关问题