您的位置:首页 > 其它

成员变量和局部变量的区别

2014-10-12 20:27 225 查看
1.变量类型

在java中,根据变量定义的位置不同,可以将变量分成两种:一种是成员变量,一种是局部变量。成员变量又根据是否有static修饰可以也分成两种,一种是类变量(有static修饰),一种是实例变量(无static修饰)。

2.成员变量

成员变量指在类的范围内定义的变量,根据是否有static修饰分成类变量和实例变量。类变量又叫静态成员变量,它属于整个类,也就是说它属于所有实例,如果某个实例改变了类变量的值,那么它后面的实例再使用这个类变量的时候,这个类变量的值就是改变后的值了。类变量的生命周期和类的生命周期相同,作用域也属于整个类,在类的任何地方都可以使用。实例变量又叫非静态成员变量,它属于实例,是每个实例私有的,一个实例改变了实例变量的值不影响另一个实例对该实例变量的使用,实例变量的生命周期和实例的生命周期相同。

类变量可以通过“类名.类变量名”来使用,实例变量只能通过“实例名.实例变量名”来使用。

另外类变量是在JVM加载类的时候就已经加载了,并且只加载一次,类变量存在于堆内存中。实例变量在创建一个实例的时候才加载,每创建一个实例就会被重新加载一次。

3.局部变量

局部变量指在某个方法体内定义的变量,局部变量可以被final修饰,但不能被public,private,protected修饰,作用域是在这个方法体内部,当跳出这个方法体以后可以重新定义一个同类型同名的参数,而成员变量则不可以再定义个同类型同名的参数。

局部变量存在于栈中。

public class Demo {
	/**
	 * @author 行者摩罗
	 * @博客链接 http://blog.csdn.net/xingzhemoluo 	 */
	public static String name = "行者摩罗";
	//静态成员变量,也是全局变量,隶属于整个类,生命周期与Demo这个类的生命周期相同
	int x;
	//成员变量,隶属于实例,生命周期与实例相同,成员变量可以不初始化,因为会被自动初始化
	public void print() {
		final int a = 99;
		//局部变量必须被初始化,而且不能被public,private,protected修饰,但能被final修饰
		String url = "博客地址:http://blog.csdn.net/xingzhemoluo";
		System.out.println(name + url);
		//静态成员变量可以在方法里面使用
		System.out.println(x + a);
		//非静态成员变量,也叫实例变量也能在方法体内使用
	}
	public static void main(String[] args) {
		Demo demo = new Demo();		
		demo.print();
		//下面定义个非静态代码块
		{
			int a;
//			System.out.println(a);
			//局部变量必须初始化
			a = 10;
			System.out.println(a);
		}
//		System.out.println(a);
		//此时a超出了非静态代码块的作用域,所以会报错
		System.out.println(name);
//		System.out.println(x);//超出了x的作用域
		demo.name = "摩罗";
		demo.x = 888;
		Demo demo1 = new Demo();
		System.out.println(demo1.name);//输出摩罗,证明类变量作用域属于整个类,可以被修改
		System.out.println(demo1.x);//输出0而不是888,证明实例变量作用域为对应的实例,当创建新的实例以后,会被重新赋予默认的值
	}
}
输出结果:

行者摩罗博客地址:http://blog.csdn.net/xingzhemoluo
99
10
行者摩罗
摩罗
0


声明:

1.原创内容,转载请注明原文链接

2.摩罗不写博客,所有内容只是摩罗笔记,如有错误或者您有更好的意见,欢迎指正。

欢迎关注行者摩罗微信公众号(xingzhemoluo),共同交流编程经验,扫描下方二维码即可;

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: