标签:信息 效果 签名 stat 运行 img 分配 时间 strong
1.成员变量
。在类里定义的变量
。分类
。。类变量——以static修饰
*作用域:类的生存范围;从类的准备阶段到类的销毁
*访问:类.类变量
。。实例变量——不以static修饰
*作用域:对应实例的作用范围;从实例被创建到实例的被销毁
*访问:实例.实例变量/实例.类变量
。。例
。。实例p和p2访问类成员变量age。
。。实例修改了类变量的值,由于该类不属于它,而属于它对应的类,因此修改的依然是类的类变量,与通过类修改效果相同
。类变量和实例变量统称为成员变量:类成员变量和实例成员变量
。成员变量无需显示初始化,是要为类定义了类变量或实例变量,系统会在该类的准备阶段或创建该类实例时进行默认初始化
2.局部变量
。在方法里定义的变量
。分类
。。形参——方法签名中定义的变量
*作用域:整个方法内
。。方法局部变量——在方法内定义
*作用域:从定义该变量生效,到该方法结束失效
。。代码块局部变量——在代码块内定义
*作用域:从定义该变量时生效,从改代码块结束时失效
。除形参外,都必须显示初始化。即必须给你方法局部变量和代码块局部变量是定初始值,否则不可以访问
。。形参作用域为整个方法体,无需显示初始化,其初始化在调用该方法时由系统自动完成形参的值由调用者指定
。例
。Java允许局部变量与成员变量同名。如果方法里的局部变量和成员变量同名,局部变量会覆盖成员变量;如果需要在该方法里引用被覆盖的成员变量,则可使用this(实例变量)或类名(类变量)作为调用者来限定访问成员变量
。。例
3.成员变量的初始化和内存中的运行机制
。成员变量放置在堆内存中,当系统加载类或创建该类的实例时,系统自动为成员变量分配内存空间,并在分配内存空间后自动为成员变量指定初始值
4.局部变量初始化和内存中的运行机制
。局部变量定义后,必须通过显示初始化后才能使用
。系统不会为局部变量执行初始化,其意味着定义局部变量后,系统并未为局部变量分配内存空间,直到该变量被赋初始值时系统才会为其分配内存空间,将初始值保存在内存中
。局部变量不属于任何的类或实例,它总是保存在其所在方法的栈内存中。
。。如果局部变量是基本类型的变量,则直接把变量的值保存在爱爱对应的内存当中;
。。如果局部变量是引用类型的变量,则变量里存放的是地址,通过该地址引用到该变量实际一看你用的对象或数组
。栈内存中的变量无需系统垃圾回收,往往随方法或代码块运行的结束而结束
5.变量的使用规则
。成员变量的作用域与生存时间比局部变量的大和长;利用成员变量代替局部变量将会增大变量的生存时间(扩大内存开销)和扩大作用域(不利于提高程序的内聚性)
。使用成员变量情况
。。需定义的变量用于描述某个类或对象的固有信息(如人的身高、体重等)
。。在某个类中需要以一个变量来保存该类或实例运行时的状态信息(如五子棋程序保存五子棋运行时状态信息)
。。如果某个信息在某个类的多个方法见进行共享
。即使使用局部变量也要尽量缩小其作用范围
标签:信息 效果 签名 stat 运行 img 分配 时间 strong
原文地址:https://www.cnblogs.com/Demetris/p/9149788.html