2

我在源文件中看到以下代码。它是一个构造函数,但我不明白代码this(null)在这里的含义。

public DefaultFurnitureCatalog() {
    this((File)null);
}

任何人都可以帮忙吗?

4

5 回答 5

6

它在具有单个File参数的同一对象上调用另一个构造函数

于 2013-10-31T10:09:46.507 回答
0

这意味着调用一个重载的构造函数,它采用Object某种形式,但你不传递对象,而是传递一个普通的null.

于 2013-10-31T10:13:45.830 回答
0

public DefaultFurnitureCatalog(File f) 它使用空参数调用构造函数。为什么 ?所以public DefaultFurnitureCatalog() 将使用与 相同的逻辑public DefaultFurnitureCatalog(File f)

于 2013-10-31T10:14:45.773 回答
0

来自 Java Doc使用 this 关键字

在构造函数中,您还可以使用 this 关键字调用同一类中的另一个构造函数。这样做称为显式构造函数调用。

因此它将调用具有单个 File 参数的同一对象的另一个构造函数。如下:

public class DefaultFurnitureCatalog{     
    public DefaultFurnitureCatalog() {
       this((File)null); // this will call below constructor
    }

    public DefaultFurnitureCatalog(File file) {
       // doing something
    }
}
于 2013-10-31T10:18:04.010 回答
0

条件一:

来自 Oracle Java 教程:

在构造函数中,您还可以使用 this 关键字调用同一类中的另一个构造函数。这样做称为显式构造函数调用

如果存在,另一个构造函数的调用必须是构造函数的第一行

因此,您不能在显式构造函数调用之前创建指向 null 的文件引用。

例如:下面的代码抛出编译错误:调用 this 必须是构造函数中的第一个语句

公共课你好{

public Hello() {
    File file = null;
    this(file);
    System.out.println("hello - 1");
}
public Hello(File file) {
    System.out.println("hello - 2");
}

public Hello(String str) {
    System.out.println("hello - 3");
}

public static void main(String[] args) {
   Hello h = new Hello();
}

}

条件二:

检查您的代码,您是否有多个构造函数接受一个 Object 类型的输入参数(通常)?

例如,下面的代码抛出编译错误:对 Hello 的引用不明确,Hello 中的构造函数 Hello(File) 和 Hello 中的构造函数 Hello(String) 匹配

公共课你好{

public Hello() {
    this(null);
    System.out.println("hello - 1");
}
public Hello(File file) {
    System.out.println("hello - 2");
}

public Hello(String str) {
    System.out.println("hello - 3");
}

public static void main(String[] args) {
   Hello h = new Hello();
}

}

为避免歧义,将 null 类型转换如下:

公共课你好{

public Hello() {
    this((File)null);
    System.out.println("hello - 1");
}
public Hello(File file) {
    System.out.println("hello - 2");
}

public Hello(String str) {
    System.out.println("hello - 3");
}

public static void main(String[] args) {
   Hello h = new Hello();
}

}

希望这可以帮助

于 2013-10-31T12:12:49.640 回答