1 静态变量
1.1 定义
静态变量在计算机编程领域指在程序执行前系统就为之静态分配(也即在运行时中不再改变分配情况)存储空间的一类变量,即除局部变量外的另一种变量种类。主要定义在类里,方法外,用static进行修饰。
1.2 作用域
跟着大括号{}(整个类的内部是有效的,不随类产生的对象的不同而变化)。
1.3 生命周期
伴随类在运行中的生命周期而运行的。
1.4 初始化
public static int age = 6;
该语句是类的加载过程中被初始化的,因此先执行该语句,在执行main方法。
public static int a; | 0 |
public static double b; | 0.0 |
public static boolean c; | false |
public static String d; | null |
在上述初始化中,没有给初始化的值,编译器默认给出值,其默认值为0的变形。而局部变量只能通过复制来进行初始化,没有默认值。
2.局部变量
2.1 定义
局部变量是在运行时只暂时存在的自动变量,以动态分配方式获取存储空间的一些对象,是指在一个函数内部或复合语句内部定义的变量。其中自动变量的存储空间在调用栈上分配与释放。
2.2 作用域
定义该变量的函数或定义该变量的复合语句。
2.3 生命周期
从函数被调用的时刻算起到函数返回调用处的时刻结束。
2.4 初始化
int a = 0;
附:类是*.java 源代码经过编译得到*.class(类文件),其数据存于硬盘上,计算机的体系结构决定CPU中的数据要在内存上,因此需要将类的数据从硬盘上(以类文件为代表)加载到内存中,这个过程叫做类的加载。类的卸载是将放在内存中的类数据从内存中剔除。
在类加载的过程中也会使用到静态变量和动态变量,因此在下面补充在类加载中的会出现的情况:
- 某个类被用到的时候才触发加载,加载的数据有静态属性和方法;
- 类被用到的情况:A.method(),A.main(),A.静态属性;
- 类加载的语法(按照代码书写顺序依次执行)
public static int age = 6; static{}
- JVM管理的内存区域有栈区和方法区,类的数据(静态属性和方法)被加载到方法区,而局部变量存储于栈区。