学习effective java-13类和接口之使类和成员的可访问性减少到最小
来源:互联网 发布:淘宝退货太多 编辑:程序博客网 时间:2024/06/05 12:48
一个好的设计就在于它与其他模块的交互仅仅是通过api来交互的,从不关心其具体实现细节。就是说信息隐藏和封装性较好。
通过修饰符可以做到信息的封装,目前有四种修饰符:
私有(private)--仅仅本类可以访问。
保护(protected)--仅仅本类以及子类可以访问。
默认—就是什么也没有,可以被本包中任意访问。
公有(public)--任何类都可以访问。
尽量将类中的属性都设置为私有的,然后通过getter方法提供调用。
有这样一个规则:当你重写父类的方法的时,子类的访问级别不能够比父类低。如父类是protectd的,那么子类必须是protected或者public;父类是默认的,则子类必须是默认的或者public、protected的。
通过公有方法来暴露常量是允许的,但是如果一个类中含有常量是静态的并且是final的数组则有可能会有错误,因为客户可以修改其中的值,如下:
public class A {
public static final int[] a = { 1, 2, 3 };
public static void main(String[] args) {
for (int i = 0; i < 3; i++) {
A.a[i] = i + 2;
}
for (int i : A.a) {
System.out.println(i);
}
}
}//虽然编译无错误,但是这是不允许的。
输出结果是:
2
3
4
这明显是改变了A中数组a元素的值,数组a的大小未改变。
为了修改上面的问题,你可以将数组声明为私有的,然后提供一个clone的方式来获取数组信息,虽然会导致性能上的一些下降。修改后的代码如下:
public class A {
private static final int[] a = { 1, 2, 3 };
public static int[] getA(){
return (int[])a.clone();
}
public static void main(String[] args) {
int[] getA = getA();
for (int i = 0; i < 3; i++) {
getA[i] = i + 2;
}
for (int i : getA) {
System.out.println(i);
}
System.out.println("-------------");
getA = getA();
for (int i : getA) {
System.out.println(i);
}
}
}输出结果:
2
3
4
-------------
1
2
3
该结果是正确的。
- 学习effective java-13类和接口之使类和成员的可访问性减少到最小
- Effective Java 类和接口 13.使类和成员的可访问性最小化
- effective java(13) 之使类和成员的可访问性最小化
- 读 effective java 第12条 :使类和成员的可访问能力最小
- Effective Java之使类和成员的可访问性最小化(十三)
- Effective Java 第13条 : 使类和成员的可访问性最小化
- 《Effective java》读书记录-第13条-使类和成员的可访问性最小化
- effective--使类和成员的可访问性最小化
- 《Effective Java》笔记 使类和成员的可访问性最小化
- Effective Java读书笔记-使类和成员的可访问性最小化
- 学习effective java-15类和接口之使可变性减少
- 2015070507 - EffactiveJava笔记 - 第13条 使类和成员的可访问性最小(1)
- 2015070508 - EffactiveJava笔记 - 第13条 使类和成员的可访问性最小(2)
- 2015070601 - EffactiveJava笔记 - 第13条 使类和成员的可访问性最小(2)
- 2015070701 - EffactiveJava笔记 - 第13条 使类和成员的可访问性最小(3)
- 学习effective java-14类和接口之在公有类中使用可访问的方法,而不是使用公有域
- Effective Java(使类和成员的可访问性最小化、在公有类中使用访问方法而非公有域)
- 学习effective java-22类和接口之优先考虑静态成员类
- JavaScript Event学习第二章:Event
- union 与struct 区别简介
- 数据结构中二叉树的三种遍历方式
- WeakHashMap
- Linux服务器性能评估与优化
- 学习effective java-13类和接口之使类和成员的可访问性减少到最小
- intent数据传递问题
- php日期时间相关
- CPU和SDRAM的搭建
- unistd.h
- Hadoop中namenode和secondarynamenode分开部署
- 使用组件的风险性
- FireFox中调试JavaScript
- 注意安全