为什么java局部变量没有初始化就会报错,而成员变量没有初始化就不会报错?
2015-07-30 15:04
513 查看
代码如下
1.局部变量,报错!!!
2.成员变量,输出0
之前一直有疑问,但是也不知道具体是什么原因,今天看了thinking in java大致就了解了:
其实说到底还是java规范,因为java规定要这样就必须这样==。
原理就是,java规定,所有变量在使用之前要保证是经过初始化的,那么,局部变量报错的原因就很明显了!
但是,为什么成员变量就不会呢,成员变量在使用之前如果没有初始化,jvm就会帮我们初始化,
默认值如下:
Boolean false
Char '\u0000'(null)
byte (byte)0
short (short)0
int 0
long 0L
float 0.0f
double 0.0d
原因就是,jvm认为我们完全有可能在某一个方法中对该成员变量进行初始化,所以就不会报错,而且没有初始化的话就会自动帮我们初始化,赋给默认值!
但是要记住一点,无论如何,每个变量都会进行自动初始化,这是无法阻止的,也就是我们自己初始化之前,java都会先执行自动初始化。
1.局部变量,报错!!!
public void test(){ int i; System.out.println(i); }
2.成员变量,输出0
int i; @Test public void test(){ System.out.println(i); }
之前一直有疑问,但是也不知道具体是什么原因,今天看了thinking in java大致就了解了:
其实说到底还是java规范,因为java规定要这样就必须这样==。
原理就是,java规定,所有变量在使用之前要保证是经过初始化的,那么,局部变量报错的原因就很明显了!
但是,为什么成员变量就不会呢,成员变量在使用之前如果没有初始化,jvm就会帮我们初始化,
默认值如下:
Boolean false
Char '\u0000'(null)
byte (byte)0
short (short)0
int 0
long 0L
float 0.0f
double 0.0d
原因就是,jvm认为我们完全有可能在某一个方法中对该成员变量进行初始化,所以就不会报错,而且没有初始化的话就会自动帮我们初始化,赋给默认值!
但是要记住一点,无论如何,每个变量都会进行自动初始化,这是无法阻止的,也就是我们自己初始化之前,java都会先执行自动初始化。
相关文章推荐
- eclipse中启动项目报内存溢出问题通过修改配置解决
- Java构造函数链
- java 二叉树的实现与先序遍历和层次遍历
- java获取动态代理的target目标
- 黑马程序员_Java基础:JDK1.5后的新特性:自动拆装箱,以及注意事项
- 在eclipse中创建android工程
- java web 开发(二)
- Spring4的IoC和DI的区别
- 回调函数透彻理解Java
- JAVA代码获取月份的第一天跟最后一天
- eclipse中不能找到dubbo.xsd解决方法
- 使用Eclipse_Memory_Analyzer进行内存泄漏分析三部曲
- JDk Set及HashSet源码解析
- Java获取客户端IP
- Java回调函数
- ibatis+struts+spring配置和登录实现
- 斐波那契数Fibonacci,Java编程思想第四章练习9答案
- java 窗体
- Java多线程 -- Map容器性能比较
- Java中关于“=”和“==”的分析