一、将局部变量的作用域最小化

  1、在第一次使用变量的地方声明

  2、几乎每个变量的声明都应该包含一个初始化表达式:try-catch语句是一个例外

  3、使方法小而集中是一个好的策略

二、for-each循环优先于传统的for循环

  1、for-each循环在简洁性和预防bug方面有着传统的for循环无法比拟的优势,而且没有性能损失。

  2、三种不能使用for-each循环的情况:

    a、过滤:需要显式的迭代器的remove方法

    b、转换:需要显式的迭代器或数组索引,以便设定值

    c、平行迭代:多个相关集合同步移动。

三、了解和使用类库

  1、使用类库就是站在了巨人的肩膀上

四、如果需要精确的答案,请避免使用float和double

  1、float和double类型是为了快速计算而设计的,并不精确。尤其不能由于货币的计算,使用BigDecimal、int或者long代替。

  2、int可9位数字,long可18位数字,其他必须用BigDecimal类型。

五、基本类型优先于装箱基本类型

  1、基本类型和装箱基本类型之间的三个主要区别:

    a、基本类型只有值

    b、基本类型只有功能完备的值,装箱类型还有非功能值:null。

    c、基本类型节省时间和空间。

  2、不能忽略基本类型和装箱类型的区别,特别是在面对各种运算符时。

六、如果其他类型更适合,就尽量避免使用字符串

  1、字符串不适合代替其他的值类型:读取输入后应尽快完成转换工作。

  2、字符串不适合代替枚举类型

  3、字符串不适合代替能力表

七、当心字符串连接的性能

  1、由于String类的不可变性,连接操作符的效率不高。可使用StringBuilder类或字符数组。

八、通过接口引用对象

  1、优先使用接口而不是类来引用对象。

  2、没有接口可用的情况下,考虑抽象基类。

九、接口优先于反射机制

  1、反射机制的缺陷

    a、丧失了编译时类型检查的好处

    b、执行反射访问所需要的代码非常笨拙和冗长。

    c、性能损失

  2、一般只有类必须和编译时未知的类一起工作时才需要反射。只用来实例化对象,访问对象最好还是采用接口或者超类。

十、谨慎地使用本地方法

  1、本地方法的三个主要用途

    a、提供了“访问特定于平台的机制”的能力

    b、访问遗留代码库的能力

    c、提高系统性能

  2、随着Java平台的不断成熟,需要本地方法的地方越来越少了。

十一、谨慎地进行优化

  1、不要进行优化

  2、要努力编写结构好的程序而不是快的程序。

  3、依靠性能剖析工具来评估程序的性能,任何预测都是靠不住的。

十二、遵守普遍接受的命名惯例

  

  

Effective Java 读书笔记之七 通用程序设计的更多相关文章

  1. Effective java读书笔记

    2015年进步很小,看的书也不是很多,感觉自己都要废了,2016是沉淀的一年,在这一年中要不断学习.看书,努力提升自己 计在16年要看12本书,主要涉及java基础.Spring研究.java并发.J ...

  2. Effective Java读书笔记完结啦

    Effective Java是一本经典的书, 很实用的Java进阶读物, 提供了各个方面的best practices. 最近终于做完了Effective Java的读书笔记, 发布出来与大家共享. ...

  3. Effective Java 读书笔记

    创建和销毁对象 >考虑用静态工厂方法替代构造器. 优点: ●优势在于有名称. ●不必再每次调用他们的时候都创建一个新的对象. ●可以返回原返回类型的任何子类型的对象. ●在创建参数化类型实例的时 ...

  4. Effective Java 读书笔记(一):使用静态工厂方法代替构造器

    这是Effective Java第2章提出的第一条建议: 考虑用静态工厂方法代替构造器 此处的静态工厂方法并不是设计模式,主要指static修饰的静态方法,关于static的说明可以参考之前的博文&l ...

  5. [Effective Java 读书笔记] 第8章 通用程序设计

    本章主要讲了以下几条基本的JAVA编程原则: 1.将局部变量的作用域控制在最小,在使用时才定义 2.for-each优于for循环 有三个例外(1,2点主旨就是,for each只能用于读取,不能用于 ...

  6. Effective Java读书笔记——第三章 对于全部对象都通用的方法

    第8条:覆盖equals时请遵守通用的约定 设计Object类的目的就是用来覆盖的,它全部的非final方法都是用来被覆盖的(equals.hashcode.clone.finalize)都有通用约定 ...

  7. [Effective Java 读书笔记] 第三章 对所有对象都通用的方法 第八 ---- 九条

    这一章主要讲解Object类中的方法, Object类是所有类的父类,所以它的方法也称得上是所有对象都通用的方法 第八条 覆盖equals时需要遵守的约定 Object中的equals实现,就是直接对 ...

  8. Effective Java读书笔记--对所有对象都通用的方法

    1.覆盖equals请遵守通用规定.不需要覆写equals的场景:a.类的每个实例都是唯一的.b.类不需要提供"逻辑相等"的测试功能.c.超类已经覆盖了equals的方法.d.类是 ...

  9. Effective Java 读书笔记之二 对于所有对象都通用的方法

    尽管Object是一个具体的类,但设计它主要是为了扩展.它的所有非final方法都有明确的通用约定.任何一个类在override时,必须遵守这些通用约定. 一.覆盖equals时请遵守通用的约定 1. ...

随机推荐

  1. Mysql和Memcached的连动

    Memcached 和 mysqld 的联通 一 概述: what's UDFs ? UDFs是User Defined Functions的缩写,表示Mysql用户自定义的函数,应用程序可以利用这些 ...

  2. SaltStack之无Master和多Master(九)

    SaltStack之无Master和多Master Masterless架构,无Master 实现方式: 1)关闭minion进程 2)修改配置文件 vi /etc/salt/minion file_ ...

  3. 【转】CSS3的REM设置字体大小

    rem 长度单位   在Web中使用什么单位来定义页面的字体大小,至今天为止都还在激烈的争论着,有人说PX做为单位好,有人说EM优点多,还有人在说百分比方便,以至于出现了CSS Font-Size: ...

  4. windows7-SQLyog 安装图解

    双击: 双击已下载的SQLyog Enterprise 安装文件,点击“next”,选择“I accept...”,勾选安装组件,选择安装目录,等待安装完成. 协议:选择我接受 选择操作   选择路径 ...

  5. Java可变参数传递中可以接收多个对象

  6. 《深入理解bootstrap》读书笔记:第一章 入门准备

    一.bootstrap框架简介 Bootstrap是最流行的前端开发框架. 什么是框架:开发过程的半成品. bootstrap具有以下重要特性: (1)完整的CSS样式插件 (2)丰富的预定义样式表 ...

  7. Http请求之--C#的HttpWebRequest实现POST方式请求

    1.添加头信息和请求方法.有两种方式添加             req = (HttpWebRequest)WebRequest.Create("http://zhidao.baidu.c ...

  8. centos 7.0 修改ssh默认连接22端口 和 添加防火墙firewalld 通过端口

    首先 先做的就是 修改ssh的默认端口22 需要修改文件 /etc/ssh/sshd_config 使用命令 vi /etc/ssh/sshd_config [root@localhost ~]# v ...

  9. Python之路【第七篇续】:I/O多路复用

    回顾原生Socket 一.Socket起源: socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,对于文件用[打开][读写][关闭]模式来操作. socket就是该模式的 ...

  10. Java调试

    线上load高的问题排查步骤是: 先用top找到耗资源的进程 ps+grep找到对应的java进程/线程 jstack分析哪些线程阻塞了,阻塞在哪里 jstat看看FullGC频率 jmap看看有没有 ...