关于成员变量和局部变量是否都会被默认初始化的问题
成员变量可以不用初始化,其具有默认值;但是局部变量一定需要初始化或者赋值后才能使用,否则编译报错。
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); //报未初始化错误}
}
- 首先 Java 语言就是这么规定的。
- 然后为什么 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
关于成员变量和局部变量是否都会被默认初始化的问题相关推荐
- java 线程---成员变量与局部变量
关于成员变量与局部变量: 如果一个变量是成员变量,那么多个线程对同一个对象的成员变量进行操作时,他们对该成员变量是彼此影响的(也就是说一个线程对成员变量的改变会影响到另一个线程) . 如果一个变量是局 ...
- 【Java】5.3 成员变量和局部变量
目录 成员变量 局部变量 static的标志 变量: 成员变量和局部变量 成员变量: 有static修饰:类变量,属于类本身 无static修饰:实例变量,属于实例 局部变量: 方法块里的局部变量.仅 ...
- 使用了未初始化的局部变量_Java 成员变量和局部变量
通过一个简单的 demo 我们学习下 java 中成员变量和局部变量的相关知识点. Demo 说说下面代码执行打印的结果是什么? public class MainClass {public stat ...
- final 关键字:用来修饰类,方法,成员变量,局部变量
final 关键字:用来修饰类,方法,成员变量,局部变量 表示最终的不可变的 修饰对象 解释说明 类 无子类,不可以被继承,更不可能被重写. 方法 方法不能在子类中被覆盖 变量 称为常量,初始化以后不 ...
- java include 传递对象_变量的值传递,地址引用(和对象成员变量、局部变量创建和初始化的内存机制)...
变量的值传递,地址引用(和对象成员变量.局部变量创建和初始化的内存机制) 变量的值传递,地址引用: 搞懂=含义,=即指向,看指向的内存块是否发生改变,还有是否是新内存块, 通过指向可以控制内存块的值. ...
- Java高阶部分知识点汇总(一)- 成员变量与局部变量详讲
前言 在Java语言中,根据定义变量的位置不同,可以将变量分为两大类:成员变量与局部变量.而两者的运行机制也存在着较大的差异,本篇文章将详细介绍这两种变量的运行差异. 一.成员变量 成员变量指的是类范 ...
- [JAVA基础] 成员变量和局部变量(一看就懂的总结归纳篇)
引言 成员变量和局部变量在每种编程语言中都有涉及,如果之前了解过其他语言的成员变量或者局部变量,那么在学习java中的成员变量和局部变量时可以看看有那些联系和不同,这一块的东西也不能说难,如果第一次接 ...
- 第14天学习Java的笔记(成员变量和局部变量)
一个对象的内存图 package Demo1302;/** 定义一个类,用来模拟"手机"事物.** 属性:品牌.价格.颜色* 行为:打电话.发短信** 对应到类中:* 成员变量(属 ...
- Java成员变量和局部变量的区别
package com.zhangxueliang.demo;import org.junit.Test;/** 成员变量和局部变量的区别:* A:在类中的位置不同* 成员变量:类中,方法外* 局部变 ...
最新文章
- dataframe 去除重复
- 卸载ORACLE 11g
- qtdesigner怎么实现菜单栏跳转_人人都可写代码-Android零基础编程-app 入口菜单栏实操08...
- Java对MySQL数据库进行连接、查询和修改【转载】
- 医保费用监控指标体系建立(六)疾病指标分析
- 治病花了130万才明白:不要轻易买保险
- java局部变量简述
- 【数据库题型大总结】名词解释总结
- C语言 strftime 格式化显示日期时间 时间戳
- 员工管理系统————员工修改模块
- 深度理解linux内核零拷贝,面试题:如何理解 Linux 的零拷贝技术?
- ae效果英文版翻译对照表_AE特效常用中英文对照
- 惠普服务器开机无限重启,惠普笔记本无限重启的有效解决办法
- Java入门 J2SE
- 安卓pdf阅读器_推荐一款手机PDF阅读器、编辑器xodo docs安卓版
- 安装Vue-cli并且创建项目
- 联想电脑G40无法使用 非要睡眠后才能启用wifi
- 做移动网站还是移动应用程序?
- python绘制多个散点图_绘制多个散点图熊猫
- python切割图片地图切图脚本
热门文章
- python抓包模块
- Winform 中 dataGridView 导出到Excel中的方法总结
- 滴滴快车奖励政策,高峰奖励,翻倍奖励,按成交率,指派单数分级(3月21日)...
- 国内流行的两大开源.net微信公众平台SDK对比分析
- 各大牛逼讲师的经典Jquery精品视频教程,大放送啦!!!(包括手机移动端JqueryWeb开发)!!!...
- iOS: AFNetworking手动配置(iOS7.1, AF2.2.4)
- python之---子类父类属性之间的关系
- 【ROS学习笔记】(十二)常用可视化工具
- php网页示例,新手入门:初学动态网页PHP的18个例子
- 计算机打开共享网络连接打印机共享打印机,WIN7怎么连接共享打印机?如何设置和连接局域网共享打印机...