博客
关于我
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 数据库中 count(*),count(1),count(列名)区别和效率问题
查看>>
mysql 数据库备份及ibdata1的瘦身
查看>>
MySQL 数据库备份种类以及常用备份工具汇总
查看>>
mysql 数据库存储引擎怎么选择?快来看看性能测试吧
查看>>
MySQL 数据库操作指南:学习如何使用 Python 进行增删改查操作
查看>>
MySQL 数据库的高可用性分析
查看>>
MySQL 数据库设计总结
查看>>
Mysql 数据库重置ID排序
查看>>
Mysql 数据类型一日期
查看>>
MySQL 数据类型和属性
查看>>
mysql 敲错命令 想取消怎么办?
查看>>
Mysql 整形列的字节与存储范围
查看>>
mysql 断电数据损坏,无法启动
查看>>
MySQL 日期时间类型的选择
查看>>
Mysql 时间操作(当天,昨天,7天,30天,半年,全年,季度)
查看>>
MySQL 是如何加锁的?
查看>>
MySQL 是怎样运行的 - InnoDB数据页结构
查看>>
mysql 更新子表_mysql 在update中实现子查询的方式
查看>>
MySQL 有什么优点?
查看>>
mysql 权限整理记录
查看>>