使用“this”关键字是多余的吗? Java的

时间:2014-11-17 05:49:44

标签: java object this

我一直在互联网上做一些研究,我想我几乎了解this关键字的运作方式。我的问题是:this什么时候是必要的功能?

我知道,如果对象的私有实例变量与其设置的另一个变量(如果它们具有完全相同的名称)区分,则它非常有用。例如:

public class SomeObject {
    private int someNum;
    public SomeObject() {}
    public setSomeNum(int someNum) {
        this.someNum = someNum;
    }
}

我还从第二个答案@ using-the-keyword-this-in-java中了解到,它用于访问"嵌套"类。虽然我还没有尝试过,但这似乎是一个非常酷的主意。

这个问题是如何产生的:我正在编写一个class来定义来自一系列属性的游戏角色:

public class Charact {
    private String name;
    // A ton of other private variables that represent character stats.
    public Charact() {} // This one is for the main character.
    public Charact(String name, /*All of the other variable parameters*/) { // This one is used for making NPCs.
        this.name = name;
        // Setting of all of the other variables.
    }    
    public String getName() {return name;}
    public void setName(String name) {this.name = name;}
    // All of the other getter and setter methods.
}

所以这里有一些关于我的代码的问题(与我最初的问题相关):

使用this调用setter方法,就像在this.setVariable(variable);中一样,这是多余的,因为它会与setVariable(variable);做同样的事情吗?

我专门用大写字母声明了所有私有实例变量,这样我就可以避免在我的setter中使用this。我可以这样做吗(我是否打破了任何正常的命名约定?)或者我应该在setter中使用小写变量名和this es吗?

使用this以某种方式帮助识别某个类的实例被引用,或者它是否已经隐含在计算机中,这意味着不需要this

任何可以提供深度细化的答案都会非常有用,因为我上周才开始制作非静态课程。此外,这是我的第一个问题,所以我很抱歉,如果它似乎没有以正确的格式提出。

3 个答案:

答案 0 :(得分:4)

我认为你已经掌握了this的用途。当您需要明确指出您所指的内容时,它就可用。

这是一个新颖的例子。 (实际上并没有写这样的课程。它仅用于显示this的用法。)

class Outer {
    int value; /* #1 */

    class Inner {
        int value; /* #2 */

        void setInnerValue(int value /* #3 */) {
            //    #2      #3
            //   vvvvv   vvvvv
            this.value = value;
        }

        void setOuterValue(int value /* #4 */) {
            //          #1      #4
            //         vvvvv   vvvvv
            Outer.this.value = value;
        }
    }
}

如果没有必要限定你所引用的内容,那么它是多余的。

this也用于调用链中的构造函数。

class Example {
    Example() { this(1); }
    Example(int i) { }
}
  我打破了任何正常的命名约定吗?

是的,你是。 Java中的标识符按惯例以小写字母开头(除非它们是static final常量,通常都是大写的)。你应该遵循惯例。

答案 1 :(得分:1)

使用this来调用setter方法,就像this.setVariable(variable)一样,通常是多余的,但这是一种很好的做法。

使用大写字母声明任何变量会让所有其他可能需要维护代码的java程序员感到困惑。我们采用公约是有充分理由的。当所有变量看起来像类时,它最终会让你感到困惑,而且你无法通过实例化告诉静态调用。

this隐含this object

编辑:上述句子已从this class

更改

答案 2 :(得分:0)

使用它很方便,因为以后你会有超级的东西。如果你不使用super而不使用它,你最终会得到凌乱的代码。