【java基础】成员变量和局部变量02
成员变量和局部变量(2)
成员变量的初始化和内存中的运行机制
当系统加载类或者创建类的实例的时候,系统会自动为成员变量分配内存空间,并自动指定初始值。
package object; public class Person { //定义一个静态的变量 public static String city; //定义一个非静态的变量 public String name; public static void main(String[] args) { /*当person类加载的时候,静态变量就已经存在了,在堆内存中*/ //实例化person对象 在堆内存中创建一个person对象 //里面有一个属性name = null; //在栈内存中有一个p指向这个对象 Person p = new Person(); //给name属性赋值 p.name="郑小辉"; //通过类名给city赋值 Person.city="合肥"; //通过对象给city赋值 p.city="蚌埠"; //创建一个新的person对象 Person p1 = new Person(); //给name赋值 p1.name="郑大钱"; } }
局部变量的初始化和内存中的运行机制
局部变量(除了形参)必须要显性初始化后才能使用,系统不会为局部变量执行初始化,也就是定义了局部变量之后,系统不会给这个变量分配内存空间,直到程序为变量赋初始值之后,系统才会给他分配内存空间并将初始值保存在里面。
局部变量不属于任何类或实例,所以总是会保存在所在方法的栈内存中,基本数据类型保存的是数据本身,引用数据类型保存的是引用
栈内存中的变量无需系统垃圾回收,局部变量只保存基本数据类型的值或对象的引用,所以占得内存区通常比较小。