2011-10-23 72 views
0

我对Java中的此运算符有疑问。在程序员会写这样的代码的情况下:Java - 'this'运算符

private int counter; 

public Incrementor(int counter){ 
this.counter = counter; 
} 

它会更好,以避免阴影效应以及与此去:

private int counter; 

public Incrementor(int startValue){ 
counter = startValue; 
} 

岂不此操作使该运营商在未来编程execrises过时了吗?

+18

您已提问13个问题,但您不接受任何答案! –

+7

'这个'不是操作员。 –

+0

您可能仍然需要编写像if(someObject == this)...这样的代码,或者从内部类引用外部类的this。 – Vlad

回答

4

“this”关键字非常有用。你的例子很清楚,但想象一下你必须将自引用传递给另一个外部对象的方法。

1

有时候,你需要传递对象本身。那是当你使用this

+2

如果您有与该字段具有相同名称的参数,则不是。 – ObscureRobot

+1

使用'this'来引用一个字段绝对不是多余的 - 原始问题显示了这一点。即使它是多余的,这对代码的清晰度也会有所帮助。 – idbentley

+0

好的,好吧,不知何故,我知道我会得到这个flak。再次,用'this'显式标记字段是我在Java中只能看到的;不在C++中,而不在C#中。我想知道为什么。 –

4

this是对当前对象的引用。在你的例子中,this.counter表示在类中定义的计数器变量和方法参数counter是构造函数的局部变量。

这里的主要思想是明确提到您正在使用当前对象的变量。因此它可以提高代码的可读性和可理解性。

你也应该知道,this是不是运营商......这是给当前对象参考。

3

它喜好的问题,但大多数程序员喜欢用同一个名字的便利。难以记住用this来引用类变量吗?

+1

大多数程序员喜欢的东西并不一定是很好的做法。 – ObscureRobot

3

在你的第一个例子中没有阴影。为了引用类变量,this是非常明确的方法。

2

我会使用第一个。它使代码更具可读性。 此外,您还应该将方法名称为 setCounter(),因为这也适用于可读性

另一个不相关的问题是坚持使用Java编码约定命名方法,如Methods部分here中所述。

编辑:这不是一个方法就是这样。哎呀!

+0

提及Java编码约定。我会推荐*启动*与JCC并修改它们以适合您的需要。 – ObscureRobot

4

this在更多的场景被用于:

  • 它允许从字段
  • 它允许传递对象作为参数的方法foo.add(this)
  • 它允许当前的对象将被从内称为区分局部变量类:Outerclass.this
  • 它用于调用同一类的其他构造函数:this()
2

在小方法,它往往是更清楚地给参数相同的名字,因为他们将被分配给会员。如果你正在使用更大的方法,这可能会变得混乱。但是,您需要评估是否正确的决定是更改参数的名称或将该方法分解为子函数。

3

我看到它的方式,当您对类变量进行操作时,这只是一个很好的编程实践问题。

A码等:

private int counter; 

public Incrementor(int counter){ 
this.counter = counter; 
} 

private int counter; 

public Incrementor(int startValue){ 
counter = startValue; 
} 

外推到它10行,和第一个是更可读。此外,它还使重构代码更容易。

否则,'这'具有特殊意义。 'this'关键字引用类中的当前对象,符合面向对象的原则。在吸气剂和吸附剂的情况下,它可以是非常有用和有意义的。

补充:

一旦你开始与传承工作,你会发现所谓的“超级”,可以被继承的属性和那些是一类内部本地之间显著区分另一个关键字。