什么是在Java类中使用的variables阴影?

我正在阅读我的Deitel,Java如何编程的书,碰到了术语阴影 。 如果允许遮蔽,Java类中有什么情况或有什么目的?

例:

public class Foo { int x = 5; public void useField() { System.out.println(this.x); } public void useLocal() { int x = 10; System.out.println(x); } } 

阴影的基本目的是将本地代码从周围的类中分离出来。 如果不可用,请考虑以下情况。

API中的Foo类被释放。 在你的代码中,你可以inheritance它,在你的子类中使用一个名为bar的variables。 然后,Foo发布更新,并将名为Bar的受保护variables添加到其类中。

现在你的class级不会因为你无法预料的冲突而跑步。

但是,不要故意这样做。 只有当你不关心范围之外发生的事情时,才会发生这种情况。

对于那些你不想为方法参数创build一个单独的variables名的设置器来说,

 public void setX(int x) { this.x = x; } 

除此之外,我会避免他们。

一个主要目的是混淆人。 这是不好的做法,应该避免。

影子并不是真正的Java术语。 在范围中声明的variables与更大范围中的variables名称相同的任何情况下,该variables都被映射。

阴影的一些常见用途是当你有内部和外部类,并希望保持一个相同的名称的variables。

如果你可以避免它,你应该,因为它可能会导致混乱。

两个常见的用途是构造函数和设置方法:

 public Foo(int x) { this.x = x; } public void setX(int x) { this.x = x; } 

非常偶然的是,如果你想在一个瞬间拷贝一个variables,这个variables可能会在方法调用中改变。

 private void fire() { Listener[] listeners = this.listeners; int num = listeners.length; for (int ct=0; ct<num; ++ct) { listeners[ct].stateChanged(); } } 

(当然,一个人为的例子是没有必要的。