转帖 - Java全局变量的讨论

原贴地址 : http://topic.csdn.net/t/20050430/22/3979146.html

 

请问java中全局变量应该放哪儿?

------------------------------

楼主yuntailyg(go to hell,programming)

是在含main方法的类里吗?请指点

------------------------------

1 楼nimifeng(学海无涯.......苦作舟....理解是美!!!Mars.Neil)

单独写一个final的类,在里面定义final   static的全局变量,在其它程序里包含进来就可以了。

------------------------------

2 楼louisqiang(tenwin)

类中的任何static   public的成员变量都是全局共享的。

------------------------------

3 楼lsrj(小孬)

up

------------------------------

4 楼midthinker(呵呵)

JAVA中不应该有所谓全局变量的概念,全局变量严重影响了封装和模块化,所以如果你的程序中需要所谓的

全局变量,那一定是你对程序的设计出了问题。@.@||~

------------------------------

5 楼strawbingo(避世稻草)

那JAVA提供FINAL   STATIC   干吗用啊,存在即合理,很多情况是需要用到全局变量的。   

他能减少参数的传递,能避免重复声明

------------------------------

6 楼darkattack(居士)

FINAL   STATIC应该理解为常量,而不是“全局变量”,它的目的不是为了让你每个类都可以访问,而是独立于

具体对象,抽象到类层次的东东。

------------------------------

7 楼helpall(was jl)

class   Global   {   

      public   static   final   String   APPNAME=   "xyz";   //   global   constant   

      public   static   String   currentUser   =   "abc";     //   global   variable   

      ...   

  }   

    

  class   WhatEver   {   

      ...   

      System.out.println(Global.APPNAME);   

      Global.currentUser   =   "Williams";   

  }   

------------------------------

8 楼christom1(一切皆有可能)

完全同意   darkattack(居士)   的意见。   

  JAVA中不应该出现”全局变量“的概念。   

  以上争论的焦点是:public   static   final   类型   变量   是否属于所谓的“全局变量”不得而知。   

  它只不过实现了全局的意图。   

  我们要用到该变量时,只需要把该变量所在的类引用进来就可以了。   

  这不正是我们所需要的吗?   

  不过还是要强调一定要真正理解JAVA当初出现的初衷就是为了安全性和跨平台性。   

  去掉了类似C,C++中的全局变量的概念,就是基于此的。 

------------------------------

9 楼brio8425(谁说拖拉机开不出奔驰的感觉~)

说的好啊,有了全局变量安全性就差了,,,

------------------------------

10 楼blackhost(剑心)

darkattack(居士)说的固然不无道理,但是世事无绝对,看运用,有的时候垃圾也能变成王道!   

  就象goto一样,他本身没什么错,错在运用者,用的过多过滥当然不对,但是为了避免使用GOTO却   

  用1000行来饶开,难道看1000行代码就一定看的很清晰吗?   

    

  java的全局变亮也是一样,不能用的太滥,什么东西都往全局上靠图省事自然会出问题,但是过度恐惧不敢用也不可取,该用的场合还是要用的.特别是独体类型,全虚拟机只有一份,数据库连接池对象一般就是独体对象,至于原因,我想不用我多说了吧!

------------------------------

11 楼daocaoren0(稻草人)

如果一个栈内存段就能搞定的事情,为何要用多个堆内存段来实现呢?   

    

  呵呵   什么是封装?什么是抽象?什么是面向对象?

------------------------------

12 楼Cooper_Lyt()

同意   剑心   

  佩服   稻草人。。。   

  正在学C++....         

------------------------------

13 楼midthinker(呵呵)

TO:   blackhost(剑心)     

          对于   

          “象goto一样,他本身没什么错,错在运用者,用的过多过滥当然不对,但是为了避免使用GOTO却   

  用1000行来饶开,难道看1000行代码就一定看的很清晰吗?”   

    

  我非常赞同,确实全局变量在某些环境下可能还有其实际的意义。但是在JAVA中,确实没有所谓的全局变量的概念,通过设置一个abstract   class   or   interface,并将许多final   or   final   static   field置于其中,并在使用时调用ClassName.xxx   or   InterfaceName.xxx来模拟全局变量的使用(可以肯定的是,在许多的著作中大师们都已经反复强调了将许多常数放入一个abstract   class   or   interface,并使之成为常数类或常数接口的做法是对此功能的误用,并不鼓励如此使用,有兴趣可以参阅《effective   java》——机械工业出版社出版   Joshua   Bloch   著),但   

          首先,final   or   final   static确实不是全局变量的概念,在JAVA中,一切都是对象,在对象中声明的无论是field还是method亦或是property都将归属于某一种抽象或具体类型,否则也不会在调用中使用ClassName.xxx   or   InterfaceName.xxx这样的形式来加以说明这是这个CLASS的XXX,那是那个INTERFACE的XXX。事实上final代表的是一种常量形式(Constant),而static则代表一种静态观念,常量的概念是为了区别于变量而存在的不变的变量(有些别扭,突然发现自己词语贫乏,HOHO),而静态则是希望区别于某一具体Object而独立存在于某一特定类型的变量(到可以称之为该类型的全局变量,但个人感觉不很确切)。全局变量的概念显然过于宽泛,以至于我们说一个程序甚至是一个系统拥有一个唯一的变量变成可能,但final   or   static显然不是为其而设计的(当然可以模拟)。   

          其次,阁下提到的有关于“全虚拟机只有一份,数据库连接池对象...”是设计模式中所谓单例模式的实际应用,该模式确实非常像所谓的全局变量的概念,但设计这样单个实例确实是因为在系统的整个生命周期中只需要一份该实例存在的缘故,更多的是突出概念而非实际应用,而全局变量则更多就是为了实际应用而生,这样就会导致许多不成熟的,不加思考的应用加于其上而导致黏糊的像意大利面条一样的代码。   

          所以个人认为,依在下实在低微的学识实在不敢胡乱评说关于全局变量是否有实际意义这样巨大的课题,这样的课题还是留给那些专家去讨论吧。至于如何实际应用全局变量,我看,还是有则去之,无则加冕吧,实在要用偶也么的办法(不过自从使用C++/JAVA开始,全局变量的使用确实降到了一个极低的程度,也许是因为在下的代码写的还是太少的缘故吧,呵呵...)。   

    

  @.@||~

------------------------------

14 楼xuelei81(阿薛)

最好不要使用全局变量,你完全可以不用它

------------------------------

15 楼xhjf777(古格国王)

helpall(was   jl),给出的是正确答案   

    

    static   变量可以使用,不要认为程序中出现了static成员或方法就是程序写的不好,   

    用不用静态成员与程序写的好坏没有直接的因果关系,不要钻牛角尖。

------------------------------

16 楼Preamble(Rubbish)

interface   Global   

  {   

  public   static   final     

  }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值