00011.9变量的分类(成员变量,局部变量、类变量、实例变量、局部变量)

一、变量的分类

00011.9变量的分类(成员变量,局部变量、类变量、实例变量、局部变量)_第1张图片

1、成员变量

(1)、类变量,静态的成员变量
(2)、实例变量:非静态的成员变量

2、局部变量

二、详细说明

他们之间有什么不同呢?

1、声明的位置不同

(1)、成员变量声明在
类中 方法外
(2)、局部变量声明在 类中方法中?准确的说是
方法() 中的形参列表
方法体{}中的局部变量

2、在内存中存储的位置不同

(1)、成员变量
类变量:方法区
实例变量:堆
(2)、局部变量

虚拟机栈:非native方法的局部变量
本地方法栈:native方法的局部变量

3、修饰符不同

(1)成员变量
4中权限修饰符+static 或者final
(2)局部变量
只有final

4、生命周期

(1)成员变量:
类变量:
随着类的加载而分配空间,随着类的卸载而消亡
每一个对象是共享的
实例变量:
随着对象的创建而分配空间,随着对象被垃圾回收而回收
每一个对象是独立的
(2)局部变量
方法调用时,在栈中分配空间,在方法调用结束就消亡

5、作用域

(1)成员变量:可以说没有作用域
类变量:
在本类中随便用,在其它类中用“类名.”或者“对象名.”
实例变量:
在本类中除了静态成员中不能使用,其它随便用,在其它类中只能用“对象.”
(2)局部变量
有作用域,超过作用域就不能使用了
00011.9变量的分类(成员变量,局部变量、类变量、实例变量、局部变量)_第2张图片

代码方面得到实际区别,如下所示:

package com.atguigu.test08;

public class TestVariable {
     
	static int num;	//成员变量,也是类变量
	int a;	//成员变量,也是实例变量
	{
     
		int a;//局部变量   代码块
	}
	public static void main(String[] args) {
     
		
	}
}

test类(外部测试调用类)

package com.atguigu.test08;
import com.atguigu.test08.TestVariable;;
public class test {
     
	public static void main(String[] args) {
     
		TestVariable t=new TestVariable();
		int testNum=TestVariable.num;
		//TestVariable.a//点不出来,会报错
		int testA=t.a;
		int testA2=t.num;
	}
	
}

你可能感兴趣的:(javaSE)