一个类里有个变量 String abc 现在我要在其他类里要用到他, 我可以把变量定为 private 型 然后给他个get 方法,
也可以 定义 abc 为静态 static 型 
上面区别是什么, 有什么好处与坏处 谢谢

解决方案 »

  1.   

    static类型在该类被实例化的时候在内存里有一份,以后再实例化也仅有此一份
    get方法,取到的为该类实例化对象的私有变量,每个对象都有一份
    可以做个测试
      

  2.   

    定义成static型差距就大了。定义public型的属性和定义private型属性加上public的get、set方法,这两种方法都能实现需要的功能,但是后一种是javabean的标准规范,建议使用。而且后一种做法可以通过修改默认set、get方法实现一些特殊的功能。
    例如private int age;  public void setAge(int age){ this.age = age; }
    这是标准的set方法,可以在里面加上判断年龄是否合法,如果不合法抛出异常之类的代码。
    另外通过这种方法还可以实现对属性的访问控制,例如有的属性可能是只读的,有的属性可能是只能写而不能读的。
      

  3.   

    从内存的角度分析static:
    static 的 变量在内存中的存储和调用不依赖于类, 只能在一个地址储存, 
    去掉static的变量存储和调用依赖于类, 必须要先把类new出来,才能对变量做操作, 在内存中的储存也依赖于类,有几个类,就可以存即可值从调试的角度分析get set
    添加get set后 只要想使用该变量,就需要调用这两个方法, 一旦程序出错, 可以在get set设断点或打log
    来分析问题, 不加get 和 set的变量不具有这个优势从设计的角度分析
    需要分析abc 的所属者, 如果他是某一个事物(对象)的说明,就需要把这个事物定义成对象,然后把abc定义成私有属性,并加上get set方法, 如果这个事物(对象)具有唯一性, 就需要定义成单例模式!
      

  4.   

    不要定义那么多static型变量,因为会一直占据内存,static是全局的,除非你要在很多类中都要用到,为了方便使用定义。
    用get获得就得有对象引用,即得new出来,当你不用时垃圾回收器回进行回收,减少内存使用。
    其次,私有变量通过get方法获得,这就是封装的概念了。
      封装是保证软件部件具有优良的模块性的基础,封装的目标就是要实现软件部件的“高内聚、低耦合”,防止程序相互依赖性而带来的变动影响。在面向对象的编程语言中,对象是封装的最基本单位,面向对象的封装比传统语言的封装更为清晰、更为有力。面向对象的封装就是把描述一个对象的属性和行为的代码封装在一个“模块”中,也就是一个类中,属性用变量定义,行为用方法进行定义,方法可以直接访问同一个对象中的属性。通常情况下,只要记住让变量和访问这个变量的方法放在一起,将一个类中的成员变量全部定义成私有的,只有这个类自己的方法才可以访问到这些成员变量,这就基本上实现对象的封装,就很容易找出要分配到这个类上的方法了,就基本上算是会面向对象的编程了。