静态和非静态变量可以具有相同的名称

时间:2014-10-06 18:53:09

标签: java variables static

我有一个类,我需要两个变量,一个是静态的,另一个是非静态的。当我们声明两个变量时,我的问题是什么,我们可以用相同的名称声明它们吗?

为什么我问这个问题是静态变量和非静态变量存储在两个不同的区域(方法区域中的静态变量和堆区域中的非静态(实例)变量)。 那么,如果我用相同的名称声明它们会发生什么?如果是错的,原因是什么?

2 个答案:

答案 0 :(得分:5)

不,你不能做到以下几点:

public class X{
    int a;
    static int a = 10; //Illegal
    public X(int a){
        this.a = a;
    }
}

原因是两个a都在x的实例的范围内。对于:

X x = new X(5); 
x.a; //were the static field with name a legal, this refers to both 5 and 10.

目前尚不清楚是哪个版本的a被引用。因此,为了防止混淆,这是非法的。

答案 1 :(得分:-1)

您可以在方法内部使用与类范围变量同名的变量。通常,当从该方法内部引用变量名时,方法中的变量优先于类范围的变量。要在代码中更加清晰并确保您正在访问正确的代码,请使用 this 关键字引用方法内部的变量并使用 super 关键字,用于引用类范围的变量。