这个(null)在Java中意味着什么?

时间:2013-10-31 10:08:35

标签: java

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

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

任何人都可以提供帮助吗?

5 个答案:

答案 0 :(得分:6)

它在具有单个File参数

的同一对象上调用另一个构造函数

答案 1 :(得分:0)

这意味着调用一个重载的构造函数,它接受某种Object但你没有传递一个对象,而是一个普通的null

答案 2 :(得分:0)

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

答案 3 :(得分:0)

来自Java Doc Using the this Keyword

  

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

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

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

    public DefaultFurnitureCatalog(File file) {
       // doing something
    }
}

答案 4 :(得分:0)

条件1:

来自Oracle Java教程:

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

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

因此,在显式构造函数调用之前,无法创建指向null的File引用。

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

public class Hello {

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();
}

}

条件2:

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

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

public class Hello {

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 class Hello {

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();
}

}

希望,这有帮助