effective java读书笔记13:使类和成员的可访问性最小

解读:java提供了四种访问权限的修饰,在设计类的时候要尽可能让类或者它的成员可访问性最小。这也属于信息隐藏或封装。

  • 那么为什么要这么做?

1、隐藏所有实现的细节,把它提供给外界的功能和自身的实现清晰的隔离出来,使得外界并不需要关系模块内部的细节。

2、有效地解除组成系统的各模块之间的耦合程度,使得每个模块都更独立,减轻维护的负担。例如你设计的一个类是包可见的,那么在后面的修改该类中你就不用担心包之外的调用会受到影响。

  • java中的访问控制权限

类的访问范围
A、public修饰类,表示该类在所有包中可见
B、(default)修饰类,表示该类仅在同一个包中可见
注意:不能用protected和private修饰类

成员变量及成员方法的访问范围
A、public 包内、包外,所有类中可见
B、protected 包内所有类可见,包外有继承关系的子类可见
(子类对象可调用)
C、(default)表示默认,不仅本类访问,而且是同包可见。
D、private 仅在同一类中可见

  • 关于成员变量的不可直接被外界修改的说明:

1、实例域绝对不能是公有的,静态域也不例外,除了公有静态final域作为常量的特殊情况外。所谓作为常量是值:要么是基本类型的值,要么是指向不可变对象的引用。换句话说就是不能让外界能修改到实例域!!

2、类具有公有的静态final数组域,或者返回这种域的访问方法(虽然变量声明的是私有的),这种情况坚决不允许出现。这个其实就和公有静态final域指向的是一个可变对象情况类似,虽然表面上这个成员是不可变的,实际上不可变的只是引用,引用的对象由于不是可变的,是可以任意修改的。

3、那么如何解决呢?也就是不能直接作为public让外界访问到并且也不能提供get方法直接返回成员变量,而是返回一个不可修改的变量或者拷贝出的一份。如下面的代码:

public class Test1 {

	private static final Test[] test = {new Test("a"),new Test("b")};
	
	//返回一个不准修改的集合
	public static final List<Test> getValues(){
		
		return Collections.unmodifiableList(Arrays.asList(test));
	}
	//返回克隆出来的数组
	public static final Test[] getValuesClone(){
		
		return test.clone();
	}

}

 

 

转载于:https://my.oschina.net/silence88/blog/829135

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值