成员变量可以不用初始化,其具有默认值;但是局部变量一定需要初始化或者赋值后才能使用,否则编译报错。

public class Demo {int m;public static void main(String[] args) {Demo demo = new Demo();System.out.println(demo.m); //输出0}
}public class Demo {public static void main(String[] args) {int m;System.out.println(m); //报未初始化错误}
}
  1. 首先 Java 语言就是这么规定的。
  2. 然后为什么 Java 语言要这么规定呢?有什么内部机理吗?

可能的原因如下,当我们新建一个对象时,Java会在Heap中申请一块内存区域用以存放类的数据。而成员变量就是类的数据,也是放在这块内存区域中的。只需要JVM在申请内存的时候顺便把整块区域都置为零即可完成初始化,方便快捷。
而对于方法的局部变量,是在线程的Stack中,当然Stack他也可以帮我们初始化,不过有一个问题。对于有些局部变量,在方法的一开始是没有的,有些在循环中的局部变量是要反复的声明多次的。有些局部变量作用域结束后,另一个局部变量又会占用这个局部变量的位置。
那么初始化要放在何时呢?当然JVM可以帮我们初始化多次,不过那样或许会带来性能问题。

for (int i = 0; i < 10; i++) {int n;if (i % 2 == 0) {n = 10;} else {n = 20;}
}

像是这个n,我们完全不用JVM帮我们初始化,如果每次循环他都帮我们初始化一次,那么是没有必要的。综上所述,对于局部变量,可能不帮我们初始化是一个不错的选择。(而且JVM实现起来也更容易!!!)

转自知乎:点击打开链接

转载于:https://www.cnblogs.com/JSD1207ZX/p/9386235.html

关于成员变量和局部变量是否都会被默认初始化的问题相关推荐

  1. java 线程---成员变量与局部变量

    关于成员变量与局部变量: 如果一个变量是成员变量,那么多个线程对同一个对象的成员变量进行操作时,他们对该成员变量是彼此影响的(也就是说一个线程对成员变量的改变会影响到另一个线程) . 如果一个变量是局 ...

  2. 【Java】5.3 成员变量和局部变量

    目录 成员变量 局部变量 static的标志 变量: 成员变量和局部变量 成员变量: 有static修饰:类变量,属于类本身 无static修饰:实例变量,属于实例 局部变量: 方法块里的局部变量.仅 ...

  3. 使用了未初始化的局部变量_Java 成员变量和局部变量

    通过一个简单的 demo 我们学习下 java 中成员变量和局部变量的相关知识点. Demo 说说下面代码执行打印的结果是什么? public class MainClass {public stat ...

  4. final 关键字:用来修饰类,方法,成员变量,局部变量

    final 关键字:用来修饰类,方法,成员变量,局部变量 表示最终的不可变的 修饰对象 解释说明 类 无子类,不可以被继承,更不可能被重写. 方法 方法不能在子类中被覆盖 变量 称为常量,初始化以后不 ...

  5. java include 传递对象_变量的值传递,地址引用(和对象成员变量、局部变量创建和初始化的内存机制)...

    变量的值传递,地址引用(和对象成员变量.局部变量创建和初始化的内存机制) 变量的值传递,地址引用: 搞懂=含义,=即指向,看指向的内存块是否发生改变,还有是否是新内存块, 通过指向可以控制内存块的值. ...

  6. Java高阶部分知识点汇总(一)- 成员变量与局部变量详讲

    前言 在Java语言中,根据定义变量的位置不同,可以将变量分为两大类:成员变量与局部变量.而两者的运行机制也存在着较大的差异,本篇文章将详细介绍这两种变量的运行差异. 一.成员变量 成员变量指的是类范 ...

  7. [JAVA基础] 成员变量和局部变量(一看就懂的总结归纳篇)

    引言 成员变量和局部变量在每种编程语言中都有涉及,如果之前了解过其他语言的成员变量或者局部变量,那么在学习java中的成员变量和局部变量时可以看看有那些联系和不同,这一块的东西也不能说难,如果第一次接 ...

  8. 第14天学习Java的笔记(成员变量和局部变量)

    一个对象的内存图 package Demo1302;/** 定义一个类,用来模拟"手机"事物.** 属性:品牌.价格.颜色* 行为:打电话.发短信** 对应到类中:* 成员变量(属 ...

  9. Java成员变量和局部变量的区别

    package com.zhangxueliang.demo;import org.junit.Test;/** 成员变量和局部变量的区别:* A:在类中的位置不同* 成员变量:类中,方法外* 局部变 ...

最新文章

  1. dataframe 去除重复
  2. 卸载ORACLE 11g
  3. qtdesigner怎么实现菜单栏跳转_人人都可写代码-Android零基础编程-app 入口菜单栏实操08...
  4. Java对MySQL数据库进行连接、查询和修改【转载】
  5. 医保费用监控指标体系建立(六)疾病指标分析
  6. 治病花了130万才明白:不要轻易买保险
  7. java局部变量简述
  8. 【数据库题型大总结】名词解释总结
  9. C语言 strftime 格式化显示日期时间 时间戳
  10. 员工管理系统————员工修改模块
  11. 深度理解linux内核零拷贝,面试题:如何理解 Linux 的零拷贝技术?
  12. ae效果英文版翻译对照表_AE特效常用中英文对照
  13. 惠普服务器开机无限重启,惠普笔记本无限重启的有效解决办法
  14. Java入门 J2SE
  15. 安卓pdf阅读器_推荐一款手机PDF阅读器、编辑器xodo docs安卓版
  16. 安装Vue-cli并且创建项目
  17. 联想电脑G40无法使用 非要睡眠后才能启用wifi
  18. 做移动网站还是移动应用程序?
  19. python绘制多个散点图_绘制多个散点图熊猫
  20. python切割图片地图切图脚本

热门文章

  1. python抓包模块
  2. Winform 中 dataGridView 导出到Excel中的方法总结
  3. 滴滴快车奖励政策,高峰奖励,翻倍奖励,按成交率,指派单数分级(3月21日)...
  4. 国内流行的两大开源.net微信公众平台SDK对比分析
  5. 各大牛逼讲师的经典Jquery精品视频教程,大放送啦!!!(包括手机移动端JqueryWeb开发)!!!...
  6. iOS: AFNetworking手动配置(iOS7.1, AF2.2.4)
  7. python之---子类父类属性之间的关系
  8. 【ROS学习笔记】(十二)常用可视化工具
  9. php网页示例,新手入门:初学动态网页PHP的18个例子
  10. 计算机打开共享网络连接打印机共享打印机,WIN7怎么连接共享打印机?如何设置和连接局域网共享打印机...