在java语言中,变量的命名有很多规则和规范,但是有的地方可以使用相同的变量名,有的地方却不能使用,这是为什么呢?

下面是个人的一点见解,是从作用域和内存来分析的,目的是为了方便理解

大家可以看下面这段代码:

public class Test01 {
	//static int a =1;	//所有的对象都有这个,所有不能重名
	int a=5;	//单个对象的属性,在堆中存储
	public static void main(String[] args) {
		int a=10;	//方法区存储
		{
			//int a =15;	//这是个语句块,也在方法区存储,不能重名
		}
	}
}

上面一共写了四种变量,都同名,静态变量,成员变量,局部变量和块里的变量

一般来说,静态变量是存储在方法区或者叫数据共享区,作用范围是整个类,是从自己声明开始到这个类结束,所以之后的类中不能再出现和他相同名字的变量,不管是成员变量,还是局部变量

成员变量是在堆中存储,是对象的属性,作用域是当前对象,局部变量是在方法区存储的,作用域是从当前到这个方法最后,两者不影响,所以这两个是可以同名

然后是局部变量之间,他们都是在方法区内,作用域的范围是自身到所处大括号的结尾之间,这个范围内不能出现同名的变量

10-24 05:22