黑马程序员技术交流社区

标题: 局部变量 [打印本页]

作者: 浅易    时间: 2015-10-25 14:05
标题: 局部变量
为什么全局变量会自动赋值而局部变量就不会

作者: 叶子和大人    时间: 2015-10-25 14:05
我觉得吧,只要是在类的{}内直接定义的变量就是全局变量,而局部变量是除了在类{}中直接定义的变量之外的变量。全局变量在类加载的时候会进行初始化,而局部变量不会,java就是这么规定的。。。。著作权归作者所有。 商业转载请联系作者获得授权,非商业转载请注明出处。 可能的原因如下,当我们新建一个对象时,Java会在Heap中申请一块内存区域用以存放类的数据。而成员变量就是类的数据,也是放在这块内存区域中的。只需要JVM在申请内存的时候顺便把整块区域都置为零即可完成初始化,方便快捷。而对于方法的局部变量,是在线程的Stack中,当然Stack他也可以帮我们初始化,不过有一个问题。对于有些局部变量,在方法的一开始是没有的,有些在循环中的局部变量是要反复的声明多次的。有些局部变量作用域结束后,另一个局部变量又会占用这个局部变量的位置。那么初始化要放在何时呢?当然JVM可以帮我们初始化多次,不过那样或许会带来性能问题。
  1. for (int i = 0; i < 10; i++) {     int n;     if (i % 2 == 0) {         n = 10;     } else {         n = 20;     } }
复制代码
像是这个n,我们完全不用JVM帮我们初始化,如果每次循环他都帮我们初始化一次,那么是没有必要的。综上所述,对于局部变量,可能不帮我们初始化是一个不错的选择。(而且JVM实现起来也更容易!!!)
作者: 浅易    时间: 2015-10-25 14:36
意思是java就是这么设计的吗??
作者: 756129186    时间: 2015-10-25 15:25
全局变量是在整个程序中都有效,只要出现全部变量中定义的变量都自动赋值,而局部变量只在定义中有效,出了定义中的范围就不自动定义,局部变量义不在正在程序中有效所以不会自动定义。,
作者: VV烽火    时间: 2015-10-25 22:24
因为全局变量储存在堆里面,对象一new初始化就会默认赋值。而局部变量储存在栈里面,用完就出栈,是不会有自动赋值的。主要是储存位置的不同,堆里面的成员会有默认赋值。
作者: 流连忘返    时间: 2015-10-25 22:35
就是在方法内定义的变量
作者: 崔节帅    时间: 2015-10-31 19:50
这个答案好标准 啊
作者: tansuozhey    时间: 2015-11-21 10:52
学习了!其实个人有点不同意java中的变量叫全局变量(因为这是C中的定义,面向对象的封装作用就是为了解决全局变量被随处调用,状态不定的问题);其实java中就两种变量:
1、代表类属性的成员变量(存储在java的堆中,一般都是需要在构造函数中进行初始化的,如果不初始化,就像上面说的jdk会在编译的时候自动初始化为默认值;);通过包(命名空间)和修饰符限定访问的权限,实现限制性的调用,实现稳定性。
2、方法中的局部变量(存储在java的栈中,一般都是需要我们自己初始化,以确保不会存在什么bug,没有初始化局部变量而引起的bug在C编程中很常见);需要我们注意的就是它的作用域。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2