关于java中成员变量有默认初始化而局部变量没有
2015-05-13 14:37
417 查看
在java中如果没有给成员变量赋值java会自动赋0,而对于局部变量却不会这是为什么呢?下面就讨论下java如何给成员变量赋值的。
1普通成员变量:对于普通成员变量而言,当你实例化的时候通过构造函数java会自动赋0。如下
通过构造方法使得i的值变成了0.
2静态成员变量:这里比较复杂,主要涉及到虚拟机的机制。当把java源文件编译成.class字节码后,.class文件会作为虚拟机的输入,虚拟机再经过加载、连接、初始化、使用和卸载。在连接阶段,虚拟机会进行验证、准备和解析。
正是在准备时,虚拟机会为static修饰的变量开辟空间,注意这里只是开辟空间,并没有执行代码。如果我写的是static int j=10;那我开辟的空间中是不会存放10的,因为代码还没执行呢。那么这个空间里的值是多少呢?正常的思维当然是我们就自动给他填个零值呗,虚拟机就是这么做的。于是static int j;代码即使我没有对j进行初始化,它依然会有零值。
1普通成员变量:对于普通成员变量而言,当你实例化的时候通过构造函数java会自动赋0。如下
public class test { int i; static int j; public static void main(String[] args) throws IOException { test a=new test(); } }
通过构造方法使得i的值变成了0.
2静态成员变量:这里比较复杂,主要涉及到虚拟机的机制。当把java源文件编译成.class字节码后,.class文件会作为虚拟机的输入,虚拟机再经过加载、连接、初始化、使用和卸载。在连接阶段,虚拟机会进行验证、准备和解析。
正是在准备时,虚拟机会为static修饰的变量开辟空间,注意这里只是开辟空间,并没有执行代码。如果我写的是static int j=10;那我开辟的空间中是不会存放10的,因为代码还没执行呢。那么这个空间里的值是多少呢?正常的思维当然是我们就自动给他填个零值呗,虚拟机就是这么做的。于是static int j;代码即使我没有对j进行初始化,它依然会有零值。
相关文章推荐
- 关于成员变量和局部变量是否都会被默认初始化的问题
- java关于局部变量必须初始化赋初值及成员变量不必须该操作的原理浅解析
- java中成员变量和局部变量的初始化
- 关于成员变量自动初始化和局部变量手动初始化
- java基础---静态变量,成员变量,局部变量及类的初始化顺序
- 虚拟机大牛RednaxelaFX关于java里面的静态变量、成员变量、局部变量的内存分配
- java成员变量和局部变量的初始化和内存中的运行机制
- 关于JAVA语言中成员变量和局部变量的区别总结
- Java成员变量和局部变量初始化问题
- 基于java变量和作用域以及成员变量的默认初始化(详解)
- Java中的成员变量和局部变量
- Java 类加载顺序与成员变量初始化
- java 中 成员变量和 局部变量的区别
- 牛客网Java刷题知识点之全局变量(又称成员变量,分为类变量和实例变量)、局部变量、静态变量(又称为类变量)
- Java成员变量、局部变量、静态变量、成员方法、全局方法等概念的区别
- Java接口成员变量和方法默认修饰符
- java中成员变量与局部变量的区别
- 在Java中关于静态变量和全局变量什么时候初始化的问题
- java面向对象之成员变量和局部变量 以及他们的内存分配
- 成员变量自动初始化,局部变量必须手动初始化