Java学习心得1--类的成员变量
2011-04-21 00:06
239 查看
java是纯面向对象的语言,所以在设计类的时候应该尽量保证它的封装性。因此在设置某个类中的成员变量时最好将其设置为private。有时候要获得或修改某个变量的值的时候,应该提供下面两个内容:
一个访问的方法;
一个修改的方法;
虽然这样比提供一个public类型的变量要麻烦,但却有明显的好处:
1.改变其实现或修改的方法,外部不受影响。
例如:int hour,min,sec;
那么在某个gettime方法中我们就能随时改变实现的方式,而不影响外部的调用。
2.在修改的方法中我们和可以对数据进行可靠性的检查。
例如:在settime方法中,我们能对用户输入的时间格式,大小等做限制。
在编写访问方法的时候有一点需要特别注意:不要返回引用的变量类型。下面是一个例子:
Class Employee
{
...
public Date getHireDay()
{
return hireDay;
}
...
private hireDay;
}
下面的代码将会破坏封装性!
Employee emp = 。。。。
Date d = emp.getHireDay();
d.setTime(....);
这时也许客户仅仅想获得的是emp的时间而已,却在无心之下破坏了emp的数据。这样的带来的灾难不可想象。
对于这个问题的解决方法是返回引用对象的clone。
下面是修改后的代码:
Class Employee
{
...
public Date getHireDay()
{
return hireDay.clone();
}
...
private hireDay;
}
一个访问的方法;
一个修改的方法;
虽然这样比提供一个public类型的变量要麻烦,但却有明显的好处:
1.改变其实现或修改的方法,外部不受影响。
例如:int hour,min,sec;
那么在某个gettime方法中我们就能随时改变实现的方式,而不影响外部的调用。
2.在修改的方法中我们和可以对数据进行可靠性的检查。
例如:在settime方法中,我们能对用户输入的时间格式,大小等做限制。
在编写访问方法的时候有一点需要特别注意:不要返回引用的变量类型。下面是一个例子:
Class Employee
{
...
public Date getHireDay()
{
return hireDay;
}
...
private hireDay;
}
下面的代码将会破坏封装性!
Employee emp = 。。。。
Date d = emp.getHireDay();
d.setTime(....);
这时也许客户仅仅想获得的是emp的时间而已,却在无心之下破坏了emp的数据。这样的带来的灾难不可想象。
对于这个问题的解决方法是返回引用对象的clone。
下面是修改后的代码:
Class Employee
{
...
public Date getHireDay()
{
return hireDay.clone();
}
...
private hireDay;
}
相关文章推荐
- 重踏学习Java路上_Day07(成员与局部变量,形参,匿名对象,封装,private,this,构造与成员方法,static)
- Java学习笔记(一)——类成员变量默认值
- Java反射学习-使用反射修改一个类中的所有String类型的成员变量的值
- 099day(Java对象成员变量和函数,直言命题对当关系直接推理和换位法,换质法的学习)
- Java菜鸟学习笔记--面向对象篇(八):成员变量和局部变量
- java学习日记_14:面向对象之成员变量与局部变量的区别。
- 类反射学习(三) JAVA如何利用类反射调用普通函数、访问成员成员变量
- java学习笔记之成员变量和局部变量的区别
- java学习个人笔记---类成员变量初始化顺序
- Java学习笔记(成员变量的初始化)
- java学习心得:关于对象与引用变量的关系的理解
- java学习之旅12--变量_成员变量和局部变量_常量_命名规范
- Java学习提要——"反射"获取方法信息(成员函数、成员变量 、构造函数)
- Android(java)学习笔记109:通过反射获取成员变量和成员方法并且使用
- Java学习笔记----成员变量与局部变量
- 黑马程序员——【Java反射学习】方法的反射/成员变量的反射/构造函数的反射
- Java 学习之路 之 成员变量和局部变量
- Java学习笔记(成员变量初始化补充)
- java反射学习笔记(3)---使用Class来获取方法、成员变量、构造函数信息
- Java学习笔记十五:Java中的成员变量和局部变量