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

Nar*_*ddy 3 java variables static

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

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

Msh*_*nik 5

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

public class X{
    int a;
    static int a = 10; //Illegal
    public X(int a){
        this.a = a;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

目前还不清楚a提到哪个版本.因此,为了防止混淆,这是非法的.