2012-04-16 83 views
0

为什么我需要使用的setProperty能够设置一个变量的值,在我的Java类使用的setProperty设置变量一类价值

当我可以只创建变量的实例并使用intance访问我的变量并分配一个值。

+0

如果您的问题已被回答,或者如果它不再有效,请勾选以选择最合适的答案,以便大家都知道问题已得到解决。谢谢。 – wattostudios 2012-05-14 13:36:03

回答

3

你所指的是Encapsulation。它是面向对象编程的基石之一。你通常想要限制其他代码的能力来混淆你的类的内部结构。

想象一个简单的例子,其中将整数值设置为负值将使您的班级发生灾难性故障。有了一个setter,你可能能够更好的东西解决这个问题,比如像这样:

public void setNumber(int number) 
{ 
    if (number < 0) 
    { 
     number = 1; 
    } 
    this.number = number 
} 

或者(更可能)

public void setNumber(int number) 
    { 
     if (number < 0) 
     { 
      throw new Exception("Number can't be less than 0"); 
     } 
     else 
     { 
      this.number = number 
     } 
    } 

正如评论所指出的Raveesh夏尔马下面,这就是所有实例变量应该被声明为私有的原因。

+0

http://stackoverflow.com/questions/7622730/why-instance-variables-in-java-are-always-private – 2012-04-16 13:44:11

0

这是封装的面向对象原理的一般实现。有很多情况下,使用setter没有或者没有什么优势。但是,有些情况下它可以帮助您避免发现错误。

Class Person 
Integer age; 
.... 
setAge(Integer age) 
{ 
if (this.age<age || age>120) 
    { 
    Throw new RuntimeException("The age: "+age+"is invalid"); 

} 
else { 
    this.age=age; 
} 

作为该计划的增长的复杂性,这可以帮助你找出错误前面。由于您可能事先不知道程序如何随着时间的推移而发展,因此通常最好谨慎一些,并使用getter/setter来开始。大多数IDE使这相当无痛。

0

您确定可以通过直接访问给定实例中的属性来分配值,但这绝对违背了Java Object Oriented原则的基础。

Java OO中的最佳实践建议您通过使类属性保密,并通过getter/setter访问它们来封装类中的属性。

应用此原则是减少类之间耦合的一种方法。

0

你并不需要使用getProperty()setProperty()(被称为getter和setter方法),但它是在Java中访问类级属性的首选方式。它是面向对象编程中使用的一个基本原理,称为封装,它根据所有权,隐私级别,对象树中的层次结构等定义哪些对象应该访问哪些属性。

它还允许您用你的属性做更高级的事情,比如让它们同步。这允许您在访问属性时确保顺序被保留,以便您不会按顺序覆盖值。

当我第一次学习编程时,所有这些东西对我来说并不明显,但随着您对编程的了解越来越多,原因和好处开始出现并变得更有意义。