【总结】Effective java经验之谈,类与接口

转载请注明出处:http://blog.csdn.NET/supera_li/article/details/44940563

Effective Java系列

1.Effective java经验之谈,创建和销毁对象

2.Effective java经验之谈,泛型

3.Effective java经验之谈,类与接口

4.Effective java经验之谈,通用方法

5.Effective java经验之谈,枚举,注解,方法,通用设计,异常

6.Effective java经验之谈,并发编程

本章描述的是,自己在做系统重构的时候,阅读的章节,给自己在架构方面提供很大帮助。总结出一些干货分享一下啊啊啊~~主要应用场景是编写类与接口的时候需要注意的问题。每一章不一定按照顺序更新。欢迎拍砖补充。

1.类与成员的访问权限最小化。Public
staticfinal 如果指向的是对象(数组也是对象),那么往往是错误的写法,【private static final 
A=指向该对象,同时采用public static final指向A.clone()(A的副本)】【private staticfinal 
A=指向该对象,public static final
List通过Collections.unmodifiableList(Arrays.asList(A))返回一个List列表,存放数组】

2.在公有类使用访问方法而非开放数据域,即公有类不应该暴露可变域。例如javabean采用setter/getter方法来操作对象数据域

3.复合优于继承,将继承类当做一个组件放到复合类中,通过一系列转发方法实现继承类。然后通过外界函数调用此复合类。

4.要么为继承而设计,并提供文档说明,要么就禁止继承。禁止继承,可以通过final,以及构造器私有化完成。如果需要继承,那么需要考虑继承类在任何时候不能调用该类可覆盖的方法,可以机械消除可覆盖方法的自用特性,通过将该覆盖的方法代码复制一份私有辅助方法。通过调用私有辅助方法消除自用特性。

5.接口优于抽象类,抽象类是为继承而设计的,抽象类演变比接口容易的多,例如,后期需要增加方法,抽象类可以,但接口却不行。

6.接口只用于定义类型,例如常量接口是对接口的不良使用。对于常量的设计,如果常量紧密关联某一个类,将写入该类内部。如果能看错枚举常量就用枚举代替。否则将采用不可实例化的工具类来导出这些常量。

7.类层次优于标签类。如果代码中存在根据某一个标志位而产生不同的方法结果,也就是代码模板,那么需要考虑是否可以层次化代码,将模板代码提取为抽象类中的方法进行类层次化。

8.用函数对象表示策略,函数对象作为参数传递到方法,代表着java中的“指针”,通过可以将函数对象采用接口的形式来包装成策略,提供一个 “宿主类”通过一个公有的静态方法来调用私有的静态成员,该静态成员就是此策略的实现方式。

在系统架构编码的时候优先能统一为接口吗?该类能使用复合吗?该类是一定被继承下去的,采用抽象类可以吗?其他类能继承吗?该类编写前,X属性能public吗?大致就这些一般性思考方向。

时间: 2024-12-25 09:42:56

【总结】Effective java经验之谈,类与接口的相关文章

Effective java经验之谈,类与接口

本章描述的是,自己在做系统重构的时候,阅读的章节,给自己在架构方面提供很大帮助.总结出一些干货分享一下啊啊啊~~主要应用场景是编写类与接口的时候需要注意的问题.每一章不一定按照顺序更新.欢迎拍砖补充. 1.类与成员的访问权限最小化.Public staticfinal 如果指向的是对象(数组也是对象),那么往往是错误的写法,[private static final  A=指向该对象,同时采用public static final指向A.clone()(A的副本)][private static

Effective java经验之谈,创建和销毁对象

关于Effective java 这本书,自己的一些总结性的思考.篇幅可能不按照目录来,因为自己喜欢先看哪一章就直接阅读了.不过能确定的是,每一章都会有总结.欢迎大家拍砖与补充. 1.      考虑用静态工厂的方法代替构造器.优点:有名字,不必每次创建对象,返回任何子类型对象,简洁的代码.缺点:该类将不能被子类化(复合大于继承,也是优点),不方便doc工具输出文档,一般约定的命名规则: valueOf  转换类型 getInstance 获得对象实例 newInstance 创建新的对象实例

Java常用类、接口关系图谱

呕心沥血画出此图,希望在使用Java类.接口时捋顺其关系,从而更好的组织程序逻辑---请看图 Object分出来的类都是其子类 Iterable接口分出的也是子接口 从继承关系分析,其父类实现的接口子类都被继承,子类扩展的接口,有实现同一接口的被框起了, 集合类被框起来并用实线带箭头链接其来一并实现了Serializable和Clonable接口,可见一斑 图片较大建议下载后查看更清晰,后续会继续添加常用类与接口 原文地址:https://www.cnblogs.com/Open-ing/p/1

Java 使用类,接口实现手机功能-- 练习接口的使用

|--需求说明 |--实现思路 1.根据....is......a....就是继承的逻辑,确定所有的手机都有一个手机的父类,这个父类定义为抽象类,里面定义两个抽象方法  实现打电话和发信息 2.根据....has....a....就用接口的逻辑,确定需要四个类---相机接口.移动网络接口.音频播放接口.视频播放接口 3.分别创建索尼和HTC手机类,继承手机类,按照需求分别接入接口 |--代码内容 1 /** 2 * @auther::9527 3 * @Description: 定义手机本身的功

Effective java经验之谈,枚举,注解,方法,通用设计,异常

这几章看的比较快,内容就如同标题一样比较容易理解,所以只有部分内容会在[]中解释,其他的就直接理解标题,并不影响阅读质量. 不过如果时间充足的话,还是仔细读一读原书的内容,相信还是有所收获的.主要最近自己想进入算法与机器学习部分,尽快结束这本书. 另一方面,讨论一些自己感兴趣的内容,我会将搞过的东西总结下.后面可能写一部分关于java字节码阅读以及编写的东西.只所以这么来, 是因为字节码编程还是非常用途实际的,这一"java编译语言"使得String与StringBuilder的性能对

java 继承类与接口问题

java 先extends 继承类,再implements 继承接口 1 public class DataBase extends ClassBase implements Ijiekou { 2 3 }// end

Effective java经验之谈,通用方法

对于通用方法,其实应用的场景是比较多的,我们在写一个类的时候,就要考虑是否要编写该方法的通用方法.这使得我们为以后该类的扩展性与使用方面提供很大的便利. 1.      覆盖equals时请遵守通用约定.自反性,对称性,传递性,一致性,非空性.编写子类equals的方法的时候,可以考虑是否可以用复合,不使用继承来解决问题.Instanceof进行参数检测,如果参数null,也将返回false. 2.      覆盖equals时总要覆盖hashCode. 1.对象属性不变化,返回的hashcod

Effective java经验之谈,泛型

对于泛型这一章,在起始写框架的时候,并没有注意细节,造成了很多方法或者类的错误设计.这本书在这点上弥补了我一个短板.大概的总结如下. 1.      请不要在新代码中使用原生态类型.其实也就是说List不带任何东西的原生态类型.原生态类型的出现是为了解决移植兼容性的.如果想编写出安全的代码,那么就使用泛型.这样可以在编译的时候,指出你是否使用正确.否则原生态类型将在运行期出现类无法转化的异常. 2.      消除非受检警告.格式良好安全的代码应当没有警告,或者让警告最小.如果能够确定非受检警告

Java常用类集接口以及实现方式总结

最近学习map-reduce原理以及map-reduce编程,于是顺带着学习下Java编程,对于Java常用的数据结构和类集,我总结到mind图中,便于理清相互之间的关系 package leiji; import java.util.ArrayList; import java.util.List; import java.util.Collection; public class ArryList { public static void main(String args[]){ List