博客
关于我
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 存在update不存在insert
查看>>
Mysql 学习总结(86)—— Mysql 的 JSON 数据类型正确使用姿势
查看>>
Mysql 学习总结(87)—— Mysql 执行计划(Explain)再总结
查看>>
Mysql 学习总结(88)—— Mysql 官方为什么不推荐用雪花 id 和 uuid 做 MySQL 主键
查看>>
Mysql 学习总结(89)—— Mysql 库表容量统计
查看>>
mysql 实现主从复制/主从同步
查看>>
mysql 审核_审核MySQL数据库上的登录
查看>>
mysql 导入 sql 文件时 ERROR 1046 (3D000) no database selected 错误的解决
查看>>
mysql 导入导出大文件
查看>>
MySQL 导出数据
查看>>
mysql 将null转代为0
查看>>
mysql 常用
查看>>
MySQL 常用列类型
查看>>
mysql 常用命令
查看>>
Mysql 常见ALTER TABLE操作
查看>>
MySQL 常见的 9 种优化方法
查看>>
MySQL 常见的开放性问题
查看>>
Mysql 常见错误
查看>>
mysql 常见问题
查看>>