当其名称与参数变量相同时,调用实例变量

dar*_*mkd 3 java static naming-conventions

我有这个代码:

class Foo {
 int x = 12;

public static void go(final int x) {

    System.out.println(x);

}
}
Run Code Online (Sandbox Code Playgroud)

参数final x和实例x具有相同的名称.如果我想在go()方法中使用它,我将如何引用实例变量x = 12,因为它的名称与参数变量相同?

Eng*_*uad 6

您需要将其设置为静态才能在静态方法中使用它:

static int x = 12;
Run Code Online (Sandbox Code Playgroud)

然后你可以通过类名获得它的引用:

public static void go(final int x)
{
    System.out.println(Foo.x);
}
Run Code Online (Sandbox Code Playgroud)

或者,创建一个实例并在本地使用它:

int x = 12;

public static void go(final int x)
{
    Foo f = new Foo();
    System.out.println(f.x);
}
Run Code Online (Sandbox Code Playgroud)

或者使用实例方法,并x使用关键字引用实例this:

int x = 12;

public void go(final int x)
{
    System.out.println(this.x);
}
Run Code Online (Sandbox Code Playgroud)


moo*_*e99 5

this.x 指向实例变量.

为了引用一个实例变量,你必须在一个真实的实例中:你的方法不应该是static.

  • 我打赌我的房子,这个方法被OP标记为"静态",只是因为它是从`main()`调用的,而不是真正的需要. (2认同)