成员变量:
a、成员变量可以使用Java语言中任何一种数据类型(包括基本类型和引用类型);
b、在定义成员变量时可以对其初始化,如果不初始化,java会使用默认的值对其初始化(引用类型为null,布尔类型为false,其余基本类型的初始值都为0);
分类:(1)类属性(以static修饰):类属性从这个类的准备阶段开始存在,直到系统完全销毁这个类,类属性的作用域与这个类的生存周期相同;类属性可以理解为类成员变量,与类共存亡;只要类存在,程序就可以访问该类的类属性,在程序中可以通过如下格式:类.类属性。一个类属性的内存空间只有一个,多个该类的对象共享该类属性的内存;当其中一个实例对其修改时,就会改变,static修饰的存放在data segment;类属性从这个类的准备阶段起开始存在,直到系统完全销毁这个类,类属性的作用域与这个类的生存范围相同;
(2)实例属性(不以static修饰):实例属性从这个类的实例被创建开始起存在,直到系统完全销毁这个实例,实例属性的作用域与该实例的生存周期相同;实例属性可以理解为实例的成员变量,它作为实例的一个成员,与实例共存亡;只要实例存在,程序就可以访问该实例属性,在程序中可以通过如下格式: 实例.实例属性。当创建实例的时候,在堆里面会对成员变量进行初始化;每个对象通过对应的类实例化后会有一个实例属性。
提示:一个类在使用之前要经过类加载、类验证、类准备、类解析、类初始化等几个阶段。
局部变量:
(1)局部变量可以使用java语言中的任何一种数据类型;
(2)除了形参外,局部变量都必须进行显式初始化,如果不初始化,编译不会通过;
分类:(1)形参(方法签名中定义的变量):作用域在在整个方法内;当类或对象调用某个方法时,系统会在该方法栈区为所有形参分配内存空间,并将实参的值赋给对应形参,这样就完成了形参的初始化;
(2) 方法局部变量(在方法内定义):作用域从定义该局部变量的地方开始生效,到该方法结束时消失;
(3)代码块局部变量(在代码块内定义):作用域从定义该变量的地方开始生效,到该代码块结束时失效;
成员变量和局部变量的区别
a、在类中的位置不同
成员变量:在类中定义
局部变量:在方法中定义或者方法的参数
b、在内存中的位置不同
成员变量:在堆内存(成员变量属于对象,对象进堆内存)
局部变量:在栈内存(局部变量属于方法,方法进栈内存)
c、生命周期不同
成员变量:随着对象的创建而存在,随着对象的销毁而消失
局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
d、初始化值不同
成员变量:有默认初始化值,引用类型默认为null
局部变量:没有默认初始化值,必须定义,赋值,然后才能使用
注意:
局部变量名称可以和成员变量名称一样,在方法中使用的时候,采用的是就近原则。
非静态成员变量与静态成员变量
非静态成员变量仅仅能在对象内部共享数据
而静态成员变量是可以在多个对象之间共享数据的