面相对象4——变量

1.成员变量

。在类里定义的变量

。分类

       。。类变量——以static修饰

              *作用域:类的生存范围;从类的准备阶段到类的销毁

              *访问:类.类变量

       。。实例变量——不以static修饰

              *作用域:对应实例的作用范围;从实例被创建到实例的被销毁

              *访问:实例.实例变量/实例.类变量

       。。例

 

       。。实例p和p2访问类成员变量age。

       。。实例修改了类变量的值,由于该类不属于它,而属于它对应的类,因此修改的依然是类的类变量,与通过类修改效果相同

。类变量和实例变量统称为成员变量:类成员变量和实例成员变量

。成员变量无需显示初始化,是要为类定义了类变量或实例变量,系统会在该类的准备阶段或创建该类实例时进行默认初始化

2.局部变量

。在方法里定义的变量

。分类

       。。形参——方法签名中定义的变量

              *作用域:整个方法内

       。。方法局部变量——在方法内定义

              *作用域:从定义该变量生效,到该方法结束失效

       。。代码块局部变量——在代码块内定义

              *作用域:从定义该变量时生效,从改代码块结束时失效

。除形参外,都必须显示初始化。即必须给你方法局部变量和代码块局部变量是定初始值,否则不可以访问

       。。形参作用域为整个方法体,无需显示初始化,其初始化在调用该方法时由系统自动完成形参的值由调用者指定

。例

 

。Java允许局部变量与成员变量同名。如果方法里的局部变量和成员变量同名,局部变量会覆盖成员变量;如果需要在该方法里引用被覆盖的成员变量,则可使用this(实例变量)或类名(类变量)作为调用者来限定访问成员变量

。。例

 

3.成员变量的初始化和内存中的运行机制

。成员变量放置在堆内存中,当系统加载类或创建该类的实例时,系统自动为成员变量分配内存空间,并在分配内存空间后自动为成员变量指定初始值

4.局部变量初始化和内存中的运行机制

。局部变量定义后,必须通过显示初始化后才能使用

。系统不会为局部变量执行初始化,其意味着定义局部变量后,系统并未为局部变量分配内存空间,直到该变量被赋初始值时系统才会为其分配内存空间,将初始值保存在内存中

。局部变量不属于任何的类或实例,它总是保存在其所在方法的栈内存中。

。。如果局部变量是基本类型的变量,则直接把变量的值保存在爱爱对应的内存当中;

。。如果局部变量是引用类型的变量,则变量里存放的是地址,通过该地址引用到该变量实际一看你用的对象或数组

。栈内存中的变量无需系统垃圾回收,往往随方法或代码块运行的结束而结束

5.变量的使用规则

。成员变量的作用域与生存时间比局部变量的大和长;利用成员变量代替局部变量将会增大变量的生存时间(扩大内存开销)和扩大作用域(不利于提高程序的内聚性)

。使用成员变量情况

       。。需定义的变量用于描述某个类或对象的固有信息(如人的身高、体重等)

       。。在某个类中需要以一个变量来保存该类或实例运行时的状态信息(如五子棋程序保存五子棋运行时状态信息)

       。。如果某个信息在某个类的多个方法见进行共享

。即使使用局部变量也要尽量缩小其作用范围

猜你喜欢

转载自www.cnblogs.com/Demetris/p/9149788.html