我在源文件中看到以下代码。它是一个构造函数,但我不明白代码this(null)
在这里的含义。
public DefaultFurnitureCatalog() {
this((File)null);
}
任何人都可以帮忙吗?
我在源文件中看到以下代码。它是一个构造函数,但我不明白代码this(null)
在这里的含义。
public DefaultFurnitureCatalog() {
this((File)null);
}
任何人都可以帮忙吗?
它在具有单个File
参数的同一对象上调用另一个构造函数
这意味着调用一个重载的构造函数,它采用Object
某种形式,但你不传递对象,而是传递一个普通的null
.
public DefaultFurnitureCatalog(File f)
它使用空参数调用构造函数。为什么 ?所以public DefaultFurnitureCatalog()
将使用与 相同的逻辑public DefaultFurnitureCatalog(File f)
。
来自 Java Doc使用 this 关键字
在构造函数中,您还可以使用 this 关键字调用同一类中的另一个构造函数。这样做称为显式构造函数调用。
因此它将调用具有单个 File 参数的同一对象的另一个构造函数。如下:
public class DefaultFurnitureCatalog{
public DefaultFurnitureCatalog() {
this((File)null); // this will call below constructor
}
public DefaultFurnitureCatalog(File file) {
// doing something
}
}
条件一:
来自 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();
}
}
希望这可以帮助