在类定义中使用它

时间:2013-09-06 15:34:23

标签: java

关于以下类定义:

public final class ConfigComparer {
    ...some code ....

    public ConfigComparer(String defaultFile, String siteFile)
       throws NoSuchFieldException, IllegalAccessException {
       this.defaultFile = defaultFile;
       this.siteFile = siteFile;
       defaultConfig = loadConfiguration(defaultFile);
       siteConfig = loadConfiguration(siteFile);
       load();
    }
    ..... some code  ....

}

在构造函数ConfigComparer中,有this.defaultFile = defaultFile;this.siteFile = siteFile;这两个this.用于什么或者它们的设计考虑因素是什么?

4 个答案:

答案 0 :(得分:3)

this指代代码在其中运行的实例/对象。

this.defaultFile引用类defaultFile的实例变量ConfigComparer

defaultFile引用传递给构造函数的变量。

未指定this时,它始终在实例变量之前查找局部变量。

答案 1 :(得分:0)

在实例方法或构造函数中,这是对当前对象的引用 - 正在调用其方法或构造函数的对象。您可以使用constructor在实例方法或this中引用当前对象的任何成员。

在构造函数中,this关键字在同一个类中调用另一个constructor。这样做称为显式构造函数调用。

来源:http://docs.oracle.com/javase/tutorial/java/javaOO/thiskey.html

答案 2 :(得分:0)

类定义应该是这样的:

public final class ConfigComparer {

    private String defaultFile;

    private String siteFile;

    ...some code ....
}

并且,在构造函数中,您将参数(String defaultFile, String siteFile)分配给这些属性。请注意,如果属性具有不同的名称,则不需要,但在这种情况下,如果不是,则为参数分配相同的值。

答案 3 :(得分:0)

根据linkthis指的是Within an instance method or a constructor, this is a reference to the current object

您的代码构造函数可以不使用this关键字编写 像

public ConfigComparer(String defaultFile, String siteFile)
   throws NoSuchFieldException, IllegalAccessException {
   instance_defaultFile = defaultFile;
   instance_siteFile = siteFile;
   defaultConfig = loadConfiguration(defaultFile);
   siteConfig = loadConfiguration(siteFile);
   load();
}

在您的构造函数中,关键字this是必要的,因为您的instance variablemethod parameter都是相同的,jvm需要知道您所指的是什么,这就是您需要的原因说

this.defaultFile = defaultFile