A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 徐丹 中级黑马   /  2012-11-7 23:42  /  5019 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

为什么JAVA要区分局部变量和全局变量?

评分

参与人数 1黑马币 +12 收起 理由
谭立文 + 12

查看全部评分

13 个回复

倒序浏览
变量有作用域和生命周期
局部变量和全局变量的作用域和生命周期都不同
局部变量只能在大括号内使用
全局的话 要看要看变量的修饰符 和所属类的修饰符了

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
为了俩人的权利不同,身份自然有差异
回复 使用道具 举报
蛋疼的问题。我什么世界上的人分男人和女人。。你说为什么。规则语法,什么问题。
回复 使用道具 举报
因为全局变量和布局变量的合理使用,能使程序表现出更好的高内聚低耦合性。
回复 使用道具 举报
是这样的,如果我想在一个类的从头到尾都要使用某个变量,我就定义个全局变量,这样它作用于整个类,并且随着类的消亡才消失;而如果我就想在某个方法里小小的利用某个变量做点运算或者暂代某个实际参数,我就不需要它跟着类走,这样会消耗更多的内存资源,那我就把它定义成局部变量好了,让它跟方法同生共死得了,反正我在类的其它部分又不用它

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
因为两者的作用范围不同,局部变量只作用到方法内部,成员变量就是全局变量,作用于整个程序。
回复 使用道具 举报
陈军 中级黑马 2012-11-8 10:10:18
8#
全局变量作用于整个类,类中任何方法都可以访问全局变量(当然静态不能访问非静态的)。
局部变量只作用于该局部。也就是该局部语句执行完了。该变量也就释放了。

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

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

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

回复 使用道具 举报
class Dome
{
     int a = 3;              //这里定义的变量 a 就是全局变量,它作用于整个类,类中定义的方法都可以访问它(但是静态方法不能访问他,因为他是非静态的),
                            定义它时,根据需要你可以将它定义成静态的或是私有的。它的生命周期跟着本类变化,类存在时,它就存在,类消亡时,它就消亡。
     public static void add()
    {
              int b = a++;      //这里定义的变量 b 就是局部变量,它作用于 add() 函数内部, add() 函数以外的其它方法不能访问它,
                                它的生命周期跟着add()变化,函数调用时,它存在,函数消亡时,它就消亡。
              System.out.println("int b =" + b);
     }
}

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

回复 使用道具 举报
简单的说,全局变量在整个类中都可以使用,局部变量只能对在该方法内使用,主要看你对这个变量如何使用而定!

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 梁枝武 于 2012-11-8 12:30 编辑

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

2.如果变量都是局部的,那么变量随着某方法的调用或语句块的执行结束而结束,不同的方法不能对同一个变量进行操作. 在不同的对象需要共享同一资源的时候,不同的对象就无法对同一个资源进行共享访问

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

回复 使用道具 举报
Java之 类中变量的分类和区别
/*-----------------------Java之 类中变量的分类和定义--------------------------------------*/
类中的变量可分为局部变量和成员变量两种。
局部变量是在类的一个方法体中定义的变量,方法的形参也是局部变量。
成员变量是在类属性部分定义的变量。
成员变量分为实例变量和类变量。
类变量是在声明时用static修饰符修饰的成员变量,故又称静态变量。

如果没猜错,你说的全局是代static的变量吧,那只是类变量
/*-----------------------Java之 实例变量和类变量的比较--------------------------------------*/
类变量在一个运行系统中只有一个供整个类的实例对象共享的值,该值有可能被类(及子类)和它们所创建的实例(类的对象)改变,每一次改变都影响到该类(及子列)和其他实例(类的对象)的调用。
而实例变量对其他实例(类的对象)则不会有这样的影响。

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

回复 使用道具 举报
我说说我个人的理解:计算机语言诞生的时代内存是很小的,考虑到节省内存空间的问题就有了空间自动释放的理念。java在PC内存中划分出栈内存堆内存和方法区等,针对开发者写代码时发现有些变量只作用于局部(即某一方法)它只在我们调用时才存在,符合了栈内存中执行完就释放的特性,为了让计算机能区分它们所以将这些变量定义为局部变量存放在栈内存中。而一些变量作用于整个程序所以为了计算机能区分将它定义为全局变量存放于堆内存中。起到节省内存空间提高运算效率的作用,即使现在内存越来越来大但是相应的计算机处理的处理的数据也越繁杂所以程序节省内存很重要。
回复 使用道具 举报
何伟 中级黑马 2012-11-30 12:09:23
14#
它们的作用范围和生命周期不同,存在的内存也不同,全局变量是作用在整个类,局部变量只作用在它存在的方法(函数)内,局部变量在它所在的方法(函数)执行完毕就消失类,而全局变量是在类执行完才消失的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马