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

为什么我们在java中将变量声明为私有的,java,private,encapsulation,public,Java,Private,Encapsulation,Public,通常在JavaBean类中,我们将变量声明为私有的。无论如何,我们将setter和getter方法声明为public。然后我们就可以获取并设置属性的值。那么,在这里将变量声明为private有什么用呢?如果我宣布为公众,会发生什么 提前感谢。它提供了一个选择。您可以提供或不提供getter和setter 例如,在不可变对象的情况下,只提供getter是一种常见的设计选择 经验法则:尽量减少可见性。这就是本文的目的 考虑拥有一个age属性,您希望对其进行一些控制。如果只将字段公开为公共字段,则可以

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


提前感谢。

它提供了一个选择。您可以提供或不提供getter和setter

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

经验法则:尽量减少可见性。

这就是本文的目的

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

也就是说,使用setter方法,例如,您可以有一个适当的验证机制。这使您可以控制如何以及何时访问和更改变量


这同样适用于getter方法。假设您有一些不想公开的内部结构,例如,您在内部使用枚举。但是,您不希望在课堂外显示此内容。因此,例如,在getter中,您可以生成您想要生成的任何值的字符串版本。

产生该值的主要原因可能是:

限制读写访问和不变性:

  • 如果我想使一个元素成为只读的。我会公开揭发getter

  • 我只能有一个setter,使属性可配置,如果我想在设置值时进行任何验证

  • 一个能手可以做一个防守副本

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

  • 若一个字段依赖于另一个字段,那个么您可以将该逻辑放入setter方法中,否则您将始终必须编写一个锅炉板代码来管理该字段,至少还需要一个函数调用。可以移动到setter

  • 但是使用公共属性而不是setters和getter并不能提供这么多灵活性。如果不编写额外的函数和调用开销,就不能执行1到5

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

    class HeightBean {
    
      private int height;
      public int getHeight() {
       return height;
      }
      public void setHeight(int height) {
      if(height<0)
          height=0;
      this.height = height;
      }
    }
    
    classheightbean{
    私人内部高度;
    公共整数getHeight(){
    返回高度;
    }
    公共空间设置高度(内部高度){
    
    如果(heightAnd谁说getter和setter是好的?请查看封装。基本目的是保护数据。这是一个基于对象提供与数据交互的方法的位置的概念。它防止修改对象正在管理的数据。请在否决表决前给出有效的理由。如果您保留变量其他类可以直接更改值或读取值。使用变量私有和SETER和GETER访问它,允许您在更改数据之前验证新值。希望它有意义(1)也考虑到从“代码>日期>代码>值中计算的年龄,属性是<代码>年龄< /代码>从国际状态…作为一个可能的例子;)@npinti感谢您的支持help@samba:不客气。MadProgrammer的示例也非常有效,具有更现实的实现。
      <jsp:useBean id="name" class="java.lang.String" scope="session">
      </jsp:useBean>
      <jsp:getProperty property="bytes" name="name"/>