接一,我继续分享些tips。
好吧。废话不多说,笔接上文。
1.使可变性最小化。这个是对于final关键字而言的。final关键字可以用来修饰类,方法, 属性等。用final修饰的类不可被继承,修饰的方法不能被重写, 修饰的属性其引用不能更改。而这里所说的使可变性最小化,是对final修饰的类而言的,使一个类的可变性最小化, 需要遵守以下几条规则。
(1). 不提供任何会修改对象状态的方法
(2). 保证类不会被扩展(继承方式的扩展)
(3).声明所有的域都为私有的
(4). 确保对任何可变组件的互斥访问
经过以上规则的约束, 你将得到一个线程安全的不可变类。在jdk的类库当中就有很多类被设计成了不可变类。其中大家都知道当数String了,但是其他的基本类型的包装类,其实也被设计成了不可变类,比如Byte,Character,Boolean,Integer,Double,Long等。被设计成不可变类,说明实例状态可以在多个线程之间安全共享,同样也说明实例并不提供修改内部状态的方法。就算提供,返回的也是一个新的实例。
2.标记接口
这一招在java中使用的也比较频繁,比如说Serializable,Cloneable等等都属于标记接口,这些接口都是一个空接口,所谓空接口,意思是说它没有任何声明方法和默认方法,使用它,仅仅用来标记当前类是否具有某种能力,比说说是否支持序列化,是否支持clone等等。
3.关于stream
关于stream的实现原理什么的,Effective Java这本书里讲得并不算深刻,只是讲了许多注意事项。所以我在此推荐一个博客给大家,https://www.cnblogs.com/CarpenterLee/p/6545321.html
这篇博客清晰的讲解了stream的api的使用,stream的底层实现原理,还有stream和传统for的性能比较。基本上在一些简单的操作上,for循环是有性能优势的,但是在复杂的操作上stream的性能是要好一些的。
4.