# effective java在第四章类与接口
## 修饰符
相信很多程序员对修饰符这个概念都了解,但其实修饰符这些概念中蕴含着很多信息,就好像好的代码,你看到类名,就知道他是什么意思,好的方法不需要太多注释,看方法名和看方法参数就能知道他要做什么一样。修饰符同样包含有很多的信息。假如要是一个api设计者会对这些修饰符要求特别的严格
- private :私有 一般用在类的属性,方法中 代表某个类或者说某个类的实例能访问它的权限;还有一种情况,当一个类就想对一个类可见的情况下,应该将该类 private class A 写在 public class B 中
- protected 包访问级别 跨包不能访问,其实很重要的信息,应该是申明 protected的方法,想被子类复写
别的不说了,没意思 都知道了应该
## public final 和 public final static 这些修饰符一般是修饰不可变对象 或者 常量的。 不可变的也可能是引用。里面还是有可能变的。
## example
```java
public static final Thing[ ] VALUS = {....};
```
以上情况VALUES 公开后 还是能改变他的值, 有两种方法能满足你的要求 如下
```java
private static final Thing [] PRIVATE_VALUES ={ ... };
public static final List<Thing> VALUES =Collections.unmodifiableList(Arrays.asList(PRIVATE_VALUES));
```
```java
private static final Thing[ ] PRIVATE_VALUES={...};
public static final Thing[ ] values(){
return PRIVATE_VALUES.clone();
}
```
总结完毕。书看得越多,对编程的爱好越多