Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用私有变量_Java - Fatal编程技术网

Java 使用私有变量

Java 使用私有变量,java,Java,若我可以使用公共getter和setter方法访问变量,那个么保持变量私有的意义何在 使用setter方法可以在为私有变量赋值之前实现逻辑。这可以防止其他代码将任意值指定给私有变量,这可能会导致对象处于无效状态。例如: 无setter方法 public class Addition { private int number1,number2; public void setNumber1() { } pu

若我可以使用公共getter和setter方法访问变量,那个么保持变量私有的意义何在

使用setter方法可以在为私有变量赋值之前实现逻辑。这可以防止其他代码将任意值指定给私有变量,这可能会导致对象处于无效状态。例如:

无setter方法

 public class Addition
    {
        private int number1,number2;

        public void setNumber1()
        {
        }
        public int getNumber1()
        {
        }
        public void setNumber2()
        {
        }
        public int getNumber2()
        {
        }
    }
使用setter方法:

public class Man {
    public int height;
}

//...some code
man.height = -1; // BOOOM!

您可以在setters中添加验证

public class Man {
    private int height;
    public void setHeight(int h) {
        this.height = h >= 0 ? h : 0;
    }
}

//...
man.setHeight(-10);  // Will keep the man in valid state

您可以假设将变量设为私有是编码的基本准则。若你们把它们公之于众,那个么外界是可以访问的,任何人都可以修改它

假设在您的情况下,number1应该始终是+ve int。因此setter方法将具有检查功能,并帮助您避免为其设置-ve值。见下文:

private int age;

public void setAge(int a){
   if(a>0){
      this.age = a;
   }else{
      this.age = 0;
   }
}
它遵循一个重要的面向对象属性封装。 例如,我有一个带有公共修饰符的整数可变价格(任何人都可以访问它)

现在我们知道价格不能为负,但它是公开的,所以我们对此没有任何控制。现在看看关于封装的内容

public int price;

这里我们有控制权,没有人可以设定价格的负值。这是封装的力量“给予控制”

对于下面的所有回答者(尤其是3K+用户):请停止回答如此明显的重复。把它们关上。@HamZa我同意。我删除了答案并投票关闭。调用
man.setHeight(-10)
的方法将不知道该值未设置。然后,您需要将返回类型更改为boolean以通知成功/失败。然后你打破了一般的getter-setter方法签名,“任何人都可以修改它”——在大多数情况下不是这样。只有您可以修改它。但阻止自己犯错误仍然是件好事。
public int price;
private int price;
public void setPrice(int price)
{
 if(price>0)
  this.price=price
}