成员变量/局部变量
1.定义位置不同,成员变量定义在类里,局部变量定义在类的方法里。
来自网络
2.成员变量中,其中类变量从该类的准备阶段起开始存在,直到系统完全销毁这个类,类变量的作用域与这个类的生存范围相同,一个类在使用之前要经过类加载、类验证、类准备、类解析、 类初始化等几个阶段;而实例变量则从该类的实例被创建起开始存在,直到系统完全销毁这个实例,实例变量的作用域与对应实例的生存范围相同。
正是基于这个原因,可以把类变量和实例变量统称为成员变量,其中类变量可以理解为类成员变量,它作为类本身的一个成员,与类本身共存亡;实例变量则可理解为实例成员变量,它作为实例的一个成员,与实例共存亡。
3.关于初始化,成员变量无须显式初始化,只要为一个类定义了类变量或实例变量,系统就会在这个类的准备阶段或创建该类的实例时进行默认初始化,成员变量默认初始化时的赋值规则与数组动态初始化时数组元素的赋值规则完全相同。
4.局部变量根据定义形式的不同,又可以被分为如下三种:
–形参:在定义方法签名时定义的变量,形参的作用域在整个方法内有效。当通过类或对象调用某个方法时,系统会在该方法栈区内为所有的形参分配内存空间,并将实参的值赋给对应的形参,这就完成了形参的初始化。
–方法局部变量:在方法体内定义的局部变量,它的作用域是从定义该变量的地方生效,到该方法结束时失效。
–代码块局部变量:在代码块中定义的局部变量,这个局部变量的作用域从定义该变量的地方生效,到该代码块结束时失效。
与成员变量不同的是,局部变量除形参之外,都必须显式初始化。也就是说,必须先给方法局部变量和代码块局部变量指定初始值,否则不可以访问它们。

变量的使用规则:
对Java初学者而言,何时应该使用类变量?何时应该使用实例变量?何时应该使用方法局部变量?何时应该使用代码块局部变量?
这种选择比较困难,如果仅就程序的运行结果来看,大部分时候都可以直接使用类变量或者实例变量来解决问题,无须使用局部变量。但实际上这种做法相当错误,因为定义一个成员变量时,成员变量将被放置到堆内存中,成员变量的作用域将扩大到类存在范围或者对象存在范围,这种范围的扩大有两个害处。
1.增大了变量的生存时间,这将导致更大的内存开销。
2.扩大了变量的作用域,这不利于提高程序的内聚性。

局部变量有应用场景,成员变量呢?如果有如下几种情形,则应该考虑使用成员变量:
1.如果需要定义的变量是用于描述某个类或某个对象的固有信息的,例如人的身高、体重等信息,是人对象的固有信息,每个人对象都具有这些信息。这种变量应该定义为成员变量。
再进一步,如果这种信息对这个类的所有实例完全相同,或者说它是类相关的,例如人类的眼睛数量,目前所有人的眼睛数量都是2,如果人类进化了,变成了3个眼睛,则所有人的眼睛数量都是3, 这种类相关的信息应该定义成类变量;
如果这种信息是实例相关的,例如人的身高、体重等,每个人实例的身高、体重可能互不相同,这种信息是实例相关的,因此应该定义成实例变量。
2.如果在某个类中需要以一个变量来保存该类或者实例运行时的状态信息,例如五子棋程序中的棋盘数组,用以保存五子棋实例运行时的状态信息。这种用于保存某个类或某个实例状态信息的变量通常应该使用成员变量。
3.如果某个信息需要在某个类的多个方法之间进行共享,则这个信息应该使用成员变量来保存。例如,在把浮点数转换为人民币读法字符串,数字的大写字符和单位字符等是多个方法的共享信息,因此应设置为成员变量。
即使在程序中使用局部变量,也应该尽可能地缩小局部变量的作用范围,局部变量的作用范围越小,它在内存里停留的时间就越短, 程序运行性能就越好。因此,能用代码块局部变量的地方,就坚决不要使用方法局部变量。

java成员变量/局部变量相关推荐

  1. java成员变量定义_java变量之成员变量和局部变量以及它们的运行机制

    Java语言根据变量定义位置的不同,将变量分为成员变量和局部变量.成员变量指的是定义在类中(方法外)的变量,局部变量指的是定义在方法中的变量.同时成员变量以是否用static修饰分为类变量和实例变量. ...

  2. java 静态变量,成员变量,局部变量的默认值

    java 静态变量,成员变量,局部变量的默认值 静态变量和成员变量的默认值 判断char是否被赋值 局部变量的默认值 静态变量和成员变量的默认值 静态变量和成员变量的默认值时一样的 public cl ...

  3. Java 成员变量和静态变量的区别

    文章目录 Java 成员变量和静态变量的区别 变量声明默认值 与 Python 的联系 实例变量的声明 类变量的声明 static 方法 Java 成员变量和静态变量的区别 1)成员变量所属于对象.所 ...

  4. Java 成员变量和局部变量

    成员变量:在类中定义,用来描述对象将要有什么,可被本类,有关系的其他类使用 局部变量:在类的方法中定义,在方法中临时保存数据,只能被当前类使用 区别:1.作用域不同   局部变量的作用域仅限于定义它的 ...

  5. 关于Java成员变量、局部变量、方法,在JVM的内存空间分配

    1.变量类型 2.类的结构 下面是一般类的结构 //类体=属性+状态(即:类体=变量+方法) public class 类名{ //类名最好首字母大写的英文String name; //在方法体外,所 ...

  6. java成员变量除了方法传递_JAVA类与对象(四)----成员变量与局部变量 、成员方法、构造方法...

    类体中的变量分为两部分.变量定义部分定义的变量为类的成员变量,在方法体中定义的变量和方法中涉及的变量称为局部变量. 成员变量和局部变量的区别: (1).成员变量在整个类中都有效,局部变量只在定义它的方 ...

  7. Java成员变量(全局变量)和局部变量

    在Java中变量类型有成员变量.局部变量和静态变量(类变量.static变量),本篇文章主要介绍成员变量(全局变量)和局部变量的区别. 根据变量的作用范围,将程序中的变量分为成员变量(全局变量)和局部 ...

  8. Java 成员变量与局部变量

    成员变量:在整个类中都有效 局部变量:在方法内定义的变量称为"局部变量"或"临时变量",方法结束后局部变量占用的内存将被释放 其特点就是只在定义它的方法中有效, ...

  9. java成员变量和局部变量的初始化和内存中的运行机制

    成员变量: 当系统加载类或创建类的实例时,系统会自动为成员变量分配内存空间,并在分配内存空间后,自动为成员变量指定初始值. eyeNum是类属性.name是实例属性 所有person实例访问eyeNu ...

最新文章

  1. 自定义例外:当没有查询到员工信息时,抛出例外
  2. windows 上安装 python3.7 和 pip 并配置虚拟环境
  3. 行业报告:医疗数据泄露愈发严重,谁之过错?
  4. IoT:BLE4.0教程一 蓝牙协议连接过程与广播分析
  5. Java 大对象类型的 Hiberante 映射
  6. 企业wiki之confluence安装部署(linux)及其破解
  7. php168找回管理员密码,如何找回WordPress后台管理员密码
  8. jQuery视频播放器插件
  9. ffmpeg利用crop滤镜进行视频裁剪
  10. 华为智能音响2代鸿蒙,99999元!华为全屋智能方案来了:鸿蒙生态是亮点
  11. 通过keil使用汇编语言生成二进制文件,并使用vivado仿真cortexm0处理器
  12. 【汇编笔记】win10如何搭建汇编环境(dosbox)
  13. JAVA学习笔记-----Thirteen(正则表达式,Math)
  14. 十余年软件开发经历,经验总结和程序一览(涉及Socket、WPF、vc++、CAD、图像、GIS)...
  15. 产品经理不能做错的5件事
  16. 改变世界的windows操作系统
  17. 吴俊计算机音乐研究者,音乐创作中计算机音乐技术的应用研究
  18. Echarts3 关系图-力导向布局图
  19. 一些可以参考的文档集合8
  20. 蓝牙耳机芯片,苹果弹窗电量显示为0的解决方法

热门文章

  1. 工大SSE(中等难度)
  2. 树莓派3b+音视频学习
  3. 深入理解工厂模式——由对象工厂生成对象
  4. CoolShell-第10题(大结局)
  5. LinuxKernel优秀博客
  6. 火影探讨:佐助对决雷影
  7. 零基础语法入门第二讲 be动词的形式和用法
  8. printf()用法详解
  9. WIFI智能电子标牌的优势
  10. C++变量定义和赋值