博客
关于我
Effective Java 读书笔记
阅读量:605 次
发布时间:2019-03-12

本文共 2899 字,大约阅读时间需要 9 分钟。

Effective Java 读书笔记与阿里巴巴开发手册

作为一名Java开发人员,掌握编程最佳实践至关重要。以下是一些值得注意的编程规范和优化建议,帮助开发更高效、更可靠的代码。


一、Effective Java 读书笔记

1. 遇到多个构造器参数时要考虑使用构建器

构建器模式(Builder)非常适合处理多个构造器参数的问题。通过调用get Manufacture方法可以获得一个Builder对象,在Builder对象上设置必要的参数,最终通过build方法生成目标对象。这种方式代码简洁,增加了安全性。

例如:

public class Person {    private final String name;    private final int age;    private final String address;    private final int weight;        private Person(Builder builder) {        name = builder.name;        age = builder.age;        address = builder.address;        weight = builder.weight;    }    public static class Builder {        private final String name;        private final int age;        private String address = "";        private int weight = 0;                public Builder(String name, int age) {            this.name = name;            this.age = age;        }                public Builder address(String add) {            address = add;            return this;        }                public Builder weight(int wgt) {            weight = wgt;            return this;        }                public Person build() {            return new Person(this);        }    }}

2. 避免创建不必要的对象

自动装箱(Autoboxing)会导致采装箱和拆箱过程中创建多余的对象,影响性能。尽量使用基本类型(如long而非Long),以减少装箱和拆箱带来的性能损耗。

例如:

public class testLong {    public static void main(String[] args) {        long start = System.currentTimeMillis();        Long sum = 0L;        for (int i = 0; i < Integer.MAX_VALUE; i++) {            sum += i;        }        System.out.println("花费时间:" + (System.currentTimeMillis() - start));    }}

3. 消除过期的对象引用

堆栈中的对象在被弹出后,仍然存在过期引用,导致垃圾回收机制无法优化内存使用。修复方法是将弹出后的对象引用置为null,以便垃圾回收更高效。

4. prefer try-with-resources over try-finally

try-with-resources能够自动关闭资源,简化代码并提高异常处理的可靠性。避免手动关闭资源,尤其是在频繁抛出异常时。

例如:

public static void copy(String src, String dst) throws IOException {    try (FileInputStream in = new FileInputStream(src);         FileOutputStream out = new FileOutputStream(dst)) {        byte[] buf = new byte[BUFFER_SIZE];        while ((n = in.read(buf)) >= 0) {            out.write(buf, 0, n);        }    }}

5. 不要使用原生态类型

原生态类型(如List)缺乏类型安全,可能引发ClassCastException。使用参数化类型(如List<Object>),并通过泛型来确保类型安全。

6. 基本类型优先于装箱类型

基本类型比装箱类型更高效。在大多数场景下,优先使用基本类型,除非必须使用装箱类型(如集合元素)。混合使用时,可能导致自动拆箱失误。

7. 小心使用延迟初始化

延迟初始化适用于资源有限的情况,但需要谨慎处理。静态域使用Holder模式,实例域使用双重检查模式(double-check idiom)。


二、阿里巴巴开发手册读书笔记

1. 查询优化

在写SQL时,避免使用*,只查询需要的字段,减少IO次数和后台处理负担。

2. 集合初始化

尽量指定初始容量,减少哈希冲突和扩容频繁带来的性能损耗。

3. 处理异常

捕捉异常时,尽量保留异常信息,以便排查问题。

4. 缓冲流优化

减少IO操作,使用缓冲流(如BufferedInputStream和BufferedOutputStream)来提高读写效率。

5. 常量定义

对于不会变化的值,定义为静态常量,避免多次instantiation带来的性能开销。

6. 检测空指针

开发时要提醒敏感业务,防止null指针问题。

7. 尽量降低继承复杂度

使用final修饰符避免继承带来的开销,提升运行效率。

8. 事务管理

正确配置事务属性,避免事务失效,确保数据库操作的一致性。

9. 接口幂等性

通过唯一索引、token机制等技术,防止接口重复调用带来的问题。

10. 接口定义

在接口中保持简洁,无需定义域或方法,这样更易于开发和维护。

11. ORM映射优化

选择合适的字段与DO类解耦,减少复杂度。


编程规范总结

编程是细节工作,从代码结构到异常处理,甚至是变量类型的选择,都会影响性能和可维护性。掌握Effective Java和阿里巴巴开发手册中的规范,可以写出更高效、更安全的代码。

转载地址:http://sswaz.baihongyu.com/

你可能感兴趣的文章
mysql基础---mysql查询机制
查看>>
MySQL基础5
查看>>
MySQL基础day07_mysql集群实例-MySQL 5.6
查看>>
Mysql基础命令 —— 数据库、数据表操作
查看>>
Mysql基础命令 —— 系统操作命令
查看>>
MySQL基础学习总结
查看>>
mysql基础教程三 —常见函数
查看>>
mysql基础教程二
查看>>
mysql基础教程四 --连接查询
查看>>
MySQL基础知识:创建MySQL数据库和表
查看>>
MySQL基础系列—SQL分类之一
查看>>
MySQL处理千万级数据分页查询的优化方案
查看>>
mysql备份
查看>>
mysql备份与恢复
查看>>
mysql备份工具xtrabackup
查看>>
mysql备份恢复出错_尝试备份/恢复mysql数据库时出错
查看>>
mysql复制内容到一张新表
查看>>
mysql复制表结构和数据
查看>>
mysql复杂查询,优质题目
查看>>
MySQL外键约束
查看>>