为什么我们在java中将变量声明为私有

时间:2013-04-23 05:35:15

标签: java private encapsulation public

通常在java bean类中,我们将变量声明为private。无论如何,我们将setter和getter方法声明为public。然后我们就可以获得并设置属性的值。那么在这里将变量声明为私有的用途是什么?如果我宣布为公开会发生什么?

提前致谢..

4 个答案:

答案 0 :(得分:9)

这是encapsualtion的目的。

考虑拥有age属性,并且您希望对其进行一些控制。如果您将字段简单地公开,则可以从外部访问它并随意执行任何操作。然后,检查年龄有效可能有点麻烦。

话虽如此,使用setter方法,您可以使用适当的验证机制。这使您可以控制访问和更改变量的方式和时间。

这同样适用于getter方法。想象一下,你有一些你不想暴露的内部结构,比如你在内部使用枚举。但是,您不希望在课堂外显示此信息。因此,例如,在你的getter中,你会得到你想要产生的任何值的字符串版本。

答案 1 :(得分:1)

  1. 您可以在将值设置为实例变量之前进行验证,如下所示:

    class HeightBean {
    
      private int height;
      public int getHeight() {
       return height;
      }
      public void setHeight(int height) {
      if(height<0)
          height=0;
      this.height = height;
      }
    }
    
  2. 大多数框架使用bean setter和getter来访问数据。例如,

      <jsp:useBean id="name" class="java.lang.String" scope="session">
      </jsp:useBean>
      <jsp:getProperty property="bytes" name="name"/>
    

答案 2 :(得分:0)

它提供了一个选择。您可能会也可能不会提供getter和setter。

例如,在不可变对象的情况下,仅提供getter是一种常见的设计选择。

经验法则:使用尽可能少的能见度。

答案 3 :(得分:0)

这个的主要原因可能是:

限制读写访问和不变性:

  1. 如果我想将元素设为只读。我会将getter公开为公开和

  2. 我只能设置一个setter,使属性可配置,如果我想在设置值时做任何验证。

  3. 吸气者可以制作防御性副本。

  4. 您可以关联侦听器,以通知setter方法中的任何值更改。

  5. 如果一个字段依赖于另一个字段,您可以将该逻辑放在setter方法中,否则您将始终必须编写一个样板代码来管理它,至少仍然需要一个函数调用。这可以转移到setter。

  6. 但是拥有一个公共属性而不是setter和getter并没有给出这么多的灵活性。如果不编写额外的函数和调用开销,就不能执行1到5的操作。