内存类型
成员变量(实例变量、属性)
定义:在类中定义,在类对象被创建时,分配内存。属于是对象的属性,类被实例化后才有意义的变量,所以又叫实例变量。
作用范围:实例变量初始化之后,类中所有位置都可访问
出生:对象被创建时,开辟内存空间
死亡:堆内存中对象,在栈内存中没有引用指向,等待GC回收
局部变量(本地变量)
定义:在方法中定义的变量以及方法的形参
作用范围:在方法中,定义之后的位置可以访问
出生:执行到定义语句
死亡:对应代码块执行结束或方法执行结束
类变量(类变量、静态变量)
定义:static修饰的属性
作用范围:类变量定义之后,或类名直接调用
出生:jvm启动,类被加载时,分配空间初始化
死亡:jvm关闭或类被卸载
内存位置
1、基本类型的局部变量:存放在线程栈上
2、引用对象的局部变量:引用存放在线程栈上,对象本身存在于堆内存上
3、包含方法的对象,这些方法包含的局部变量仍然存放在线程栈上,即便这个对象存放在堆上
4、对象的成员变量(属性)跟随对象,存放在堆内存中,不管是基本数据类型还是引用数据类型
5、静态成员变量跟随类定义存放在堆上
6、存放在堆上的对象可以被所有持有这个对象的线程访问。当一个线程访问该对象时,它可以访问这个对象的成员变量。如果多个线程同时调用这个对象的同一个方法,他们都将会访问这个对象的成员变量。但是每个线程都有这个成员变量的拷贝。