博客
关于我
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学习总结(4)——MySql基础知识、存储引擎与常用数据类型
查看>>
Mysql学习总结(50)——Oracle,mysql和SQL Server的区别
查看>>
Mysql学习总结(51)——Linux主机Mysql数据库自动备份
查看>>
Mysql学习总结(52)——最全面的MySQL 索引详解
查看>>
Mysql学习总结(53)——使用MySql开发的Java开发者规范
查看>>
Mysql学习总结(54)——MySQL 集群常用的几种高可用架构方案
查看>>
Mysql学习总结(55)——MySQL 语句大全再温习
查看>>
Mysql学习总结(56)——MySQL用户管理和权限设置
查看>>
Mysql学习总结(57)——MySQL查询当天、本周、本月、上周、本周、上月、距离当前现在6个月数据
查看>>
Mysql学习总结(58)——深入理解Mysql的四种隔离级别
查看>>
Mysql学习总结(59)——数据库分库分表策略总结
查看>>
Mysql学习总结(5)——MySql常用函数大全讲解
查看>>
Mysql学习总结(60)——并发量大、数据量大的互联网业务数据库设计规范总结
查看>>
Mysql学习总结(61)——MySQL优化之DBA级优化整理汇总
查看>>
Mysql学习总结(62)——MySQL连接com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link问题
查看>>
Mysql学习总结(63)——Mysql数据库架构方案选择与分析
查看>>
Mysql学习总结(64)——Mysql配置文件my.cnf各项参数解读
查看>>
Mysql学习总结(65)——项目实战中常用SQL实践总结
查看>>
Mysql学习总结(66)——设置MYSQL数据库编码为UTF-8
查看>>
Mysql学习总结(67)——MYSQL慢查询日志
查看>>