Java开发手册_46页_1mb
报告摘要
Java 开发手册(华山版 1.5.0)总结
核心内容概述
《Java 开发手册(华山版 1.5.0)》是阿里巴巴集团与 Java 社区开发者共同制定的一套编程规范,旨在提升代码质量、可读性和可维护性。手册涵盖了编程规约、异常日志、单元测试、安全规约、MySQL 数据库、工程结构、设计规约等多个方面,提供了强制和推荐的编码规范。
一、编程规约
主要观点与关键信息
-
命名风格
- 变量、方法、类等命名均不能以
_或$开头或结尾。 - 不允许使用拼音与英文混合,也不允许直接使用中文命名。
- 类名使用
UpperCamelCase,而常量命名使用全大写。 - 抽象类使用
Abstract或Base开头,异常类使用Exception结尾。 - 包名使用小写,类名可使用复数形式,但要保持自然英语单词。
- 避免子类与父类、代码块内变量命名重复。
- 变量、方法、类等命名均不能以
-
常量定义
- 禁止使用魔法值,必须用预定义的常量。
- long 类型赋值时使用
L而不是I。 - 常量应按功能归类,避免大而全的常量类。
- 常量复用层次分为五层:跨应用、应用内、子工程内、包内、类内。
-
代码格式
- 大括号内为空时写成
{},非空时遵循特定缩进规则。 - 运算符左右必须加空格,如
+,==,&&。 - 采用
4 个空格缩进,禁用tab。 - 注释使用
Javadoc格式,//仅用于单行注释。 - 方法参数定义时,逗号后必须加空格。
- 单行字符数不超过 120,超出时换行并保持对齐。
- 大括号内为空时写成
-
OOP 规约
- 禁止使用
equals与静态变量或方法进行比较,应使用==或Objects.equals。 - 使用
equals比较包装类时,注意避免因精度问题导致的错误。 Object的equals方法容易抛出NullPointerException,应使用String类型对象调用。- 所有覆写方法必须加
@Override注解。 String类型变量使用equals方法判断,避免==。BigDecimal的构造方法避免使用double类型,推荐使用String。- 所有 POJO 类属性必须使用包装类型,避免 NPE。
- 禁止同时存在
isXxx()和getXxx()方法。 - 使用
split方法时,注意检查最后的分隔符后是否有内容,避免IndexOutOfBoundsException。
- 禁止使用
-
集合处理
Set存储对象时,必须覆写equals和hashCode。- 集合转数组必须使用
toArray(T[] array),避免ClassCastException。 ArrayList的subList是原列表的视图,不能强转成ArrayList。- 使用
keySet遍历Map时,效率较低,推荐使用entrySet。 HashMap在高并发时可能出现死链,需注意使用加锁或其它数据结构。Map存储null值时,需注意不同集合类的限制。- 集合初始化时,应指定初始容量,避免频繁扩容影响性能。
-
并发处理
- 单例对象的获取与使用需保证线程安全。
- 线程命名应有明确含义,便于排查问题。
- 禁止使用
Executors创建线程池,应使用ThreadPoolExecutor。 SimpleDateFormat不是线程安全,应使用DateUtil或ThreadLocal。- 避免
Random实例被多线程使用,推荐使用ThreadLocalRandom。 - 使用
volatile避免多线程内存可见性问题。 - 使用
CountDownLatch实现异步转同步,注意countDown()和await()的调用。 - 避免在
switch语句中出现null值,需进行判断。 switch块中每个case需要break或return,或注明继续执行的case。- 避免使用
if-else嵌套超过 3 层,建议使用卫语句、策略模式等。
-
控制语句
- 所有
if/else/for/while/do语句必须使用大括号。 - 避免在
if条件中使用取反逻辑,推荐使用正向判断。 switch语句中,若变量为String类型,需先判断是否为null。try块中避免使用return,finally中也不能使用return。
- 所有
-
注释规约
- 类、方法、属性必须使用
Javadoc注释,不能使用//。 - 所有抽象方法必须使用
Javadoc,包括返回值、参数、异常说明。 - 所有类必须注明创建者和创建日期。
- 单行注释放在被注释语句上方,使用
//。 - 枚举字段必须有注释,说明其用途。
- 注释应准确反映代码逻辑和业务含义,避免冗余。
- 特殊注释标记如
TODO、FIXME,需注明标记人和时间。
- 类、方法、属性必须使用
-
其它建议
- 使用正则表达式时,建议预编译以提升效率。
- 使用
velocity模板引擎时,直接使用属性名,无需getXxx()。 - 向页面传递变量时,使用
!{var}以防止null值显示。 - 使用
Math.random()时,注意其返回值范围和精度问题。 - 使用
System.currentTimeMillis()而非new Date().getTime()。 - 日期格式化中,年份使用小写
y,月份使用大写M,分钟使用小写m。 - 视图模板中应避免复杂的逻辑,遵循 MVC 原则。
- 避免数据结构无限增长,应指定初始大小。
- 及时清理不再使用的代码段或配置信息,避免冗余。
二、异常日志
主要观点与关键信息
- 异常处理
RuntimeException应避免用catch处理,除非是需要处理的异常。- 异常不要用来做流程控制或条件控制。
catch应区分稳定与非稳定代码,尽量区分异常类型。- 捕获异常后,如果需要回滚事务,必须手动处理。
finally块中必须关闭资源,避免内存泄漏。finally中不能使用return,避免覆盖try中的返回值。- 捕获异常时,必须与抛出的异常类型匹配,或捕获其父类。
- 调用
RPC、二方包或动态生成类时,应使用Throwable捕获异常。 - 方法返回
null时,必须添加注释说明原因。 - 防止 NPE 是程序员的基本修养,需注意以下场景:
- 基本数据类型与包装类型混用。
- 数据库查询结果为
null。 - 集合为空时,元素可能为
null。 - 远程调用失败时返回
null。 Session中获取的数据可能为null。- 级联调用时,可能因
null值导致 NPE。
- 推荐使用
Optional类来避免 NPE。 - 应区分
checked和unchecked异常,避免直接抛出Exception或Throwable。 - 对于对外接口,推荐使用“错误码”而非异常,提高可读性与可维护性。
- 应用内推荐使用异常,避免错误码带来的性能损耗。
- 跨应用 RPC 调用推荐使用
Result封装,包含isSuccess()、错误码和错误信息。
三、总结
本手册为 Java 开发提供了全面的编码规范,强调代码的可读性、可维护性、线程安全、异常处理、日志规范等。它不仅规范了命名、格式、注释等基础内容,还深入探讨了集合处理、并发控制、异常抛出与捕获、日期处理等高级主题。手册中强制性规则与推荐性规则相结合,帮助开发者编写高质量、稳定、可维护的 Java 代码,同时也强调了开发者的责任与基本功,如避免 NPE、使用 Javadoc 注释、规范命名、合理使用异常类型等。
手册适用于各种 Java 项目,尤其是涉及高并发、数据结构、事务处理、RPC 调用等场景,为 Java 开发者提供了一套权威、全面的开发规范。
展开完整摘要
试读结束,高清完整版pdf/doc/ppt,请点下载