黑马程序员技术交流社区

标题: 为什么JAVA要区分局部变量和全局变量? [打印本页]

作者: 徐丹    时间: 2012-11-7 23:42
标题: 为什么JAVA要区分局部变量和全局变量?
为什么JAVA要区分局部变量和全局变量?
作者: 林晓泉    时间: 2012-11-8 00:09
变量有作用域和生命周期
局部变量和全局变量的作用域和生命周期都不同
局部变量只能在大括号内使用
全局的话 要看要看变量的修饰符 和所属类的修饰符了
作者: 吕鹏飞    时间: 2012-11-8 01:11
为了俩人的权利不同,身份自然有差异
作者: 丁桂松    时间: 2012-11-8 04:02
蛋疼的问题。我什么世界上的人分男人和女人。。你说为什么。规则语法,什么问题。
作者: 罗宝    时间: 2012-11-8 07:54
因为全局变量和布局变量的合理使用,能使程序表现出更好的高内聚低耦合性。
作者: 杨志男    时间: 2012-11-8 09:54
是这样的,如果我想在一个类的从头到尾都要使用某个变量,我就定义个全局变量,这样它作用于整个类,并且随着类的消亡才消失;而如果我就想在某个方法里小小的利用某个变量做点运算或者暂代某个实际参数,我就不需要它跟着类走,这样会消耗更多的内存资源,那我就把它定义成局部变量好了,让它跟方法同生共死得了,反正我在类的其它部分又不用它
作者: 黑马-zhangping    时间: 2012-11-8 10:00
因为两者的作用范围不同,局部变量只作用到方法内部,成员变量就是全局变量,作用于整个程序。
作者: 陈军    时间: 2012-11-8 10:10
全局变量作用于整个类,类中任何方法都可以访问全局变量(当然静态不能访问非静态的)。
局部变量只作用于该局部。也就是该局部语句执行完了。该变量也就释放了。

为什么这么区分? 这就涉及生命周期的问题。
     因为我们实际开发过程中很多时候需要在不同的方法块中使用同一个变量。如果没有全局变量。这个问题很难解决。
从名字就知道局部变量生命周期比较短。 而全局变量就和对象或者类有关了。

静态的话只跟着类的加载而加载,随着类的消失而消失。
非static的话。就跟着该类的对象存在或消失。只要创建该对象,该变量就存在了。对象不消失。它也不消失。

作者: 黑马周磊    时间: 2012-11-8 10:44
class Dome
{
     int a = 3;              //这里定义的变量 a 就是全局变量,它作用于整个类,类中定义的方法都可以访问它(但是静态方法不能访问他,因为他是非静态的),
                            定义它时,根据需要你可以将它定义成静态的或是私有的。它的生命周期跟着本类变化,类存在时,它就存在,类消亡时,它就消亡。
     public static void add()
    {
              int b = a++;      //这里定义的变量 b 就是局部变量,它作用于 add() 函数内部, add() 函数以外的其它方法不能访问它,
                                它的生命周期跟着add()变化,函数调用时,它存在,函数消亡时,它就消亡。
              System.out.println("int b =" + b);
     }
}
作者: 被遗弃者    时间: 2012-11-8 11:12
简单的说,全局变量在整个类中都可以使用,局部变量只能对在该方法内使用,主要看你对这个变量如何使用而定!
作者: 梁枝武    时间: 2012-11-8 12:27
本帖最后由 梁枝武 于 2012-11-8 12:30 编辑

你可以这么想两个极端:
1  如果不分局部变量和全局变量,因为全局变量的生命周期最长,有些变量在某些语句,或语句块调用结束了就没必要驻留在内存中了,假如一个程序都用全局变量,那么这些变量都随着类的产生而产生随着类的消失而消失,这样势必造成不必要的内存开销.
此外,大家都是全局的所以也就定义不了同名变量,否则会出现冲突

2.如果变量都是局部的,那么变量随着某方法的调用或语句块的执行结束而结束,不同的方法不能对同一个变量进行操作. 在不同的对象需要共享同一资源的时候,不同的对象就无法对同一个资源进行共享访问
作者: 李刚    时间: 2012-11-8 16:24
Java之 类中变量的分类和区别
/*-----------------------Java之 类中变量的分类和定义--------------------------------------*/
类中的变量可分为局部变量和成员变量两种。
局部变量是在类的一个方法体中定义的变量,方法的形参也是局部变量。
成员变量是在类属性部分定义的变量。
成员变量分为实例变量和类变量。
类变量是在声明时用static修饰符修饰的成员变量,故又称静态变量。

如果没猜错,你说的全局是代static的变量吧,那只是类变量
/*-----------------------Java之 实例变量和类变量的比较--------------------------------------*/
类变量在一个运行系统中只有一个供整个类的实例对象共享的值,该值有可能被类(及子类)和它们所创建的实例(类的对象)改变,每一次改变都影响到该类(及子列)和其他实例(类的对象)的调用。
而实例变量对其他实例(类的对象)则不会有这样的影响。
作者: 李龙祺    时间: 2012-11-28 16:31
我说说我个人的理解:计算机语言诞生的时代内存是很小的,考虑到节省内存空间的问题就有了空间自动释放的理念。java在PC内存中划分出栈内存堆内存和方法区等,针对开发者写代码时发现有些变量只作用于局部(即某一方法)它只在我们调用时才存在,符合了栈内存中执行完就释放的特性,为了让计算机能区分它们所以将这些变量定义为局部变量存放在栈内存中。而一些变量作用于整个程序所以为了计算机能区分将它定义为全局变量存放于堆内存中。起到节省内存空间提高运算效率的作用,即使现在内存越来越来大但是相应的计算机处理的处理的数据也越繁杂所以程序节省内存很重要。
作者: 何伟    时间: 2012-11-30 12:09
它们的作用范围和生命周期不同,存在的内存也不同,全局变量是作用在整个类,局部变量只作用在它存在的方法(函数)内,局部变量在它所在的方法(函数)执行完毕就消失类,而全局变量是在类执行完才消失的




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