我才接触java没几天,现在刚看到private的用法,有点想不明白,很多资料上都说,把属性定义成private,然后在定义一个set,一个get方法,可以达到封装的效果,可以防止外界直接访问,也就是在别的类中不能用 对象.属性的方式直接访问,而需要用对象.getXX方法访问,可是这2种访问有什么区别吗,我怎么感觉效果都一样呢,还有在单列设计模式中,把构造方法私有化,也就是在别的类中不能用new来创建该类的对象,而需要调用一个static方法返回一个该类的对象,这样做又有什么好处呢,不都是创建一个对象吗? 我真的搞不明白,private这里面有什么好处,我只是个初学者,往解答者能够详细一点,不胜感激!

解决方案 »

  1.   

    先说那个单例模式,关于设计模式我本人是很迷糊,说说自己的一点理解,单例模式顾名思义就是系统中只能有一个该类对象,把构造函数私有化,即只能在该类的内部区new一个该对象,在使用一个静态方法,则就可以让这个方法成为类方法,即与该类的具体对象无关,而且在系统中,也只可能有一个该类的对象,建议LZ多看一下访问修饰符和static方面的资料
    再说private,它实现了数据的封装,pricate的成员只有在该类的内部才能被访问。用thinking in java里的话说,“提供get/set方法以读取和改变数值,对OOP而言这是最优雅的方式,而且这也是javaBeans的基本原理”
      

  2.   

    private作用是封装别人看不到你的实现
    比如public String getValue(){
    return interceptor();
    }private String interceptor(){
    ....
    }外界虽然能调用getValue,但不知道interceptor是如何实现的static变量初始化时直接建立在内存上,不需要实例化一个类才能得到
      

  3.   

    private修饰是有道理的  比如你的一个属性a被修饰成了private   如果你不想别人修改你的a属性而只能读取,那么你可以提供一个private 的setter方法和一个public的getter方法  这样子封装就随你便,再说了就是面向对象是提倡用对象直接操作属性的,属性的改变一般要通过方法来实现,直接改变不符合面向对象原则 单例模式中提供的static方法每次返回的都是同一个实例,儿一般类可以随便创建实例,每个都可以不同
      

  4.   

    这么说吧,用setXXX的方式可以在 setXXX()方法里设置变量的赋值规则。而使用 对象.变量 的方式赋值是没有这种功能的……
    这样就能够保护数据不被违规访问
      

  5.   

    private修饰的变量具有良好的封装效果,也就是说只能通过类提供的public方法去访问,而不能直接通过实例本身去访问。class Num{
       private int a;
       public int b;   public int getA(){
          return this.a;
       }
    测试代码如下:public class Test{
       public static void main(String args[]){
          Num n = new Num();      System.out.println(n.a);//报错
           System.out.println(n.b);//没错,但是不安全;
           System.out.println(n.getA());//这是提倡的做法
       }
    }
      

  6.   

    声明为public的直接访问还是声明为private通过get/set访问这两种方式确实都可以访问,但后者把属性封装起来了,更安全,java是一门面向对象的语言,面向对象的核心是封装、继承、多态,因此你直接把属性声明为public访问是不妥的,至于单例模式,顾名思义,至始至终只有一个实例,你如果不把构造方法声明为private的,直接可以new的话,那不是可以生成无数实例?那还叫什么单例模式呢
      

  7.   

    不安全表现在哪里,小弟看不出来啊,刚上大学,学校都还没开java课,自己摸索的.谢谢啦
      

  8.   

    如一个类:人
    他的所漏在外部的部分 如:手
    当有一个动作: 拉手
    这是你可见的,public,可直接调用
    但拉手的过程需要:神经 体液 肌肉 等反应(映射到类中是方法或属性),这些就要设置成为private了,要不然别人用起来不方便,还很缀余,并且很不安全(表现为修改属性,你试试让一个人拉你神经哈哈^^)
      

  9.   

    把属性定义成private,然后用set和get方法来访问的优点:
    1.可以在set和get方法中追加一些验证。比如,对set方法的参数进行验证,是否满足要求。
    2.set和get方是两个方法,可以用不同的访问控制符来定义。比如,将set方法定义成protected,而将get方法定义成public。则……效果很明显。
    3.javaBean会用反射机制来访问你的属性,set和get方法是一套规范性的东西。至于单例模式,你应该再多看看例子,然后自己比较一下,如果不用单例模式,会有什么问题。
      

  10.   

      private 修饰的属性,是出于不想让别人修改这个属性的值。但为了让别人调用,所以就提供了public 型的get()方法。其实呢,你现在还是初学者的话,就先解这么多吧,等你学的多了就知道了,private的属性和方法都是不安全的,反射统统可以把他们搞定。呵!~
       建议你看下核心编程第8版上卷