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