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

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

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

枚举和注解

  1. 用enum代替int常量。[类|方法通用常量,enum集中起来方便管理|调用|更改]
  2. 用实例域代替序数
  3. 用EnumSet代替位域
  4. 用EnumMap代替序数索引
  5. 用接口模拟可伸缩的枚举[接口类型的枚举,建议看下]
  6. 注解优先于命名模式[就是注解包那个东西]
  7. 坚持使用Override注解[override如果不显示注解,可能引发没有真正覆盖父类的方法,使得未来程序成为潜在bug]
  8. 用标记接口定义类型[eg:就是一些序列化类与targe(ENUM.常量)的取舍对比的东西。如果应用特殊化接口,那么使用前者]

方法

  1. 检查参数的有效性[方法开头做参数校验,对传入的参数要做可信性判断]
  2. 必要时进行保护性拷贝[输出到客户端,客户端返回回来的数据不一定可信,如果可能,就在服务器端进行一份拷贝,这样是最可信的]
  3. 谨慎设计方法签名
  4. 慎用重载[能少就少,能通过类型转换的调用就调用,尽量避免使用重载]
  5. 慎用可变参数[方法参数应该尽量少]
  6. 返回零长度的数组或者集合,而不是null[不然上层代码一直需要做null检测,或者返回null的时候需要增加很多注释]
  7. 为所有导出的API元素编写文档注释

通用程序设计

  1. 将局部变量的作用域最小化
  2. For-each循环优先于传统的for循环
  3. 了解和使用类库
  4. 如果需要精确的答案,请避免使用float和double[仅用于科学计算使用浮点数类,有时候可以考虑用大数类BigDecimal代替相关运算]
  5. 基本类型优先于装箱基本类型[后者属于类,特别在循环中不停的进行自动拆箱与装箱,性能下降较为严重]
  6. 如果其他类型更适合,则尽量避免使用字符串[字符串有较高的性能开销,一个连接+号就代表着字符对象的new,考虑StringBuilder类代替?]
  7. 当心字符串连接的性能[类似于连接+号就是对象的new操作]
  8. 通过接口引用对象[更改对象实现后,只需要将接口后面的new对象类型改变,其他代码不变,可以继续使用]
  9. 接口优先于反射机制[反射机制主要是侵入式的,而且反射出的异常都是集中在运行期的,对于异常的把控不太容易,所以不建议使用]
  10. 谨慎地使用本地方法[平台迁移就over了]
  11. 谨慎地进行优化[分析好优化,尽量在设计好优劣好进行优化,不然优化可能导致多余的浪费]
  12. 遵守普遍接受的命名惯例[容易理解与团队共识的才是惯例]

异常

  1. 只针对异常的情况才使用异常[多正常的一句话,但是对异常情况这个界定还需要仔细斟酌]
  2. 对可恢复的情况使用受检异常,对编程错误使用运行时异常
  3. 避免不必要使用受检异常[传入的参数可信性]
  4. 优先使用标准对应的异常[标准化,容易理解]
  5. 每个方法抛出的异常都要有文档[方便理解]
  6. 在细节消息中包含能够捕捉失败的信息[应该叫做保留异常现场,方便异常出现时知道上下文的内容]
  7. 努力使失败保持原子性[就是不要讲多起失败都处理成一个失败]
  8. 不要忽略异常[catch后就做一个处理,不能忽视,或者忽视后给一个注释]
时间: 2024-10-20 05:20:22

Effective java经验之谈,枚举,注解,方法,通用设计,异常的相关文章

【总结】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经验之谈,并发编程

Effective java经验之谈,通用方法

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

Effective Java之枚举类

随着Effective Java这本书看的越来越多,发现在平时使用Java时犯了很多明显的错误,自己平时知道一点但缺少使用的也越来越多. 关于枚举类,书中的建议是用枚举类替代传统的静态常量,平时,如果一类数据用不同的数值表示,我正常的做法是写一串const static常量来表示,但看了这本书后发现,这样的表示方法虽然可以达到自己的目的,但是存在一些隐患,比如类型安全,还有,在使用上述方法区分不同的类型时,某一个具体的类型中的方法是在外面用过判断然后调用的,在这种情况下,代码就变得不是很漂亮.

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

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

Java笔记--枚举&注解

1.自定义枚举类的实现,例: class Season{ //1,提供类的属性,声明为rivate final private final String name; private final String Desc; //2,声明为final的属性,在构造器中初始化,构造器为private private Season(String name, String desc){ this.name = name; this.Desc = desc; } //3,通过公共的方法来调用属性 public

[Effective Java]第七章 方法

第七章      方法 38.      检查参数的有效性 绝大多数方法和构造器对于传递给它们的参数值都会有某些限制.例如,索引值必须是非负的,对象引用不能为null等,这些都是常见的.你应该在文档中清楚地指明所有这些限制,并且在方法体的开头处检查参数,以强制施加这些限制. 应该在方法和构造器体前进行了参数的有效性检查,并且及时向外抛出适当的异常.如果方法没有检查它的参数,就有可能发生几种情形.该方法可能在处理过程中失败,并且产生令人费解的异常,更有可能,该方法可以正常返回,但是会悄悄地计算出错

Effective java经验之谈,类与接口

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

Effective java经验之谈,泛型

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

Effective Java 读书笔记之六 方法

一.检查参数的有效性 1.考虑参数有哪些限制,把限制写到文档中,在方法的开头处通过显式地检查来实施这些限制. 二.必要时进行保护性拷贝 1.如果类具有从客户端得到或者返回的可变组件,类就必须考虑保护性拷贝这些组件. 2.如果拷贝成本比较高,类又可以信任他的客户端,不进行拷贝保护,但要进行文档的说明. 三.谨慎设计方法签名 1.谨慎地选择方法的名称:遵守规范,保持风格一致. 2.不要过于追求提供便利的方法. 3.编码过长的参数列表 a.一个方法分解成多个方法 b.创建辅助类,保存参数的分组. c.