在java语言中,变量的命名有很多规则和规范,但是有的地方可以使用相同的变量名,有的地方却不能使用,这是为什么呢?
下面是个人的一点见解,是从作用域和内存来分析的,目的是为了方便理解
大家可以看下面这段代码:
public class Test01 {
//static int a =1; //所有的对象都有这个,所有不能重名
int a=5; //单个对象的属性,在堆中存储
public static void main(String[] args) {
int a=10; //方法区存储
{
//int a =15; //这是个语句块,也在方法区存储,不能重名
}
}
}
上面一共写了四种变量,都同名,静态变量,成员变量,局部变量和块里的变量
一般来说,静态变量是存储在方法区或者叫数据共享区,作用范围是整个类,是从自己声明开始到这个类结束,所以之后的类中不能再出现和他相同名字的变量,不管是成员变量,还是局部变量
成员变量是在堆中存储,是对象的属性,作用域是当前对象,局部变量是在方法区存储的,作用域是从当前到这个方法最后,两者不影响,所以这两个是可以同名
然后是局部变量之间,他们都是在方法区内,作用域的范围是自身到所处大括号的结尾之间,这个范围内不能出现同名的变量