当前位置: 首页 > news >正文

Java编程规范(简约版)

文章目录

  • 1、方法长度限制50行内,复杂逻辑采用总分编码或设计模式
  • 2、命名规范,见名知义,禁止随意缩写与拼音
  • 3、尽早返回,减少嵌套层级,提高代码可读性
  • 4、方法参数限制不超过5哥,过多参数封装为POJI对象
  • 5、Spring @Transactional事务注解正确使用
  • 6、代码逻辑复用,减少重复,提高可维护性
  • 7、共享对象与线程安全
  • 8、大内存场景务必确保数量有限性,避免OOM
  • 9、单元测试,明确用例设计,逻辑全覆盖
  • 10、日志规范、格式统一、合理级别与内容管控

1、方法长度限制50行内,复杂逻辑采用总分编码或设计模式

  • 单一职责:一个方法只做一件事,不超过50行
  • 总分结构:主方法统筹,子方法实现业务细节
  • 设计模式:策略、模板方法解决复杂逻辑,提升复用性与扩展性

Java中的​​策略模式​​和​​模板方法模式,可以查看往期内容详解Java中的​​策略模式​​和​​模板方法模式

2、命名规范,见名知义,禁止随意缩写与拼音

  • 包:全小写,点分隔(com.company.project)
  • 类:首字母大写驼峰,名词单数(UserService)
  • 方法:首字母小写驼峰,动词(calculatePrice())
  • 变量:首字母小写驼峰,名称(originalPrice)
  • 常量:全大写,下划线分隔(MAX_VALUE)
  • 避坑:POJO布尔变量不加is前缀

3、尽早返回,减少嵌套层级,提高代码可读性

  • 边界优先:数据校验和异常情况先处理,尽早return
  • 去除嵌套:消灭多层if-else迷宫,每个if就是一个岔路口,尽量让代码沿主干道前进
  • 控制层次:代码结构如阶梯,不宜过深

4、方法参数限制不超过5哥,过多参数封装为POJI对象

  • 五指原则:参数不超过一只手的数量
  • 封装转换:多参数->POJO对象
  • 构建模式:关键的参数用构造器,非关键参数用setter,或者复杂对象用builder模式

关于构建模式详解:Java 中几种常见的“对象创建/配置”策略

5、Spring @Transactional事务注解正确使用

  • 公用方法:Service层所有公共方法添加事务注解,长耗时的方法除外
  • 明确异常:显示指定回滚/不回滚异常类型(下方详解)
  • 不吞异常:捕获后必须重新抛出
  • 代理可见:必须public非final方法
  • 避免自调:避免同类内部方法调用导致事务失效(详解)

@Transactional 的默认行为是:只有在抛出 RuntimeException(运行时异常)或其子类(如 NullPointerException、IllegalArgumentException 等)时才会触发事务回滚。
对于 Checked Exception(受检异常),如 IOException、SQLException,默认不会回滚事务。

@Transactional
public void saveData() {// 会回滚throw new RuntimeException("出错了!");
}@Transactional
public void saveData2() throws IOException {// 不会回滚throw new IOException("IO 异常!");
}

常见的写法:
@Transactional(rollbackFor = Throwable.class)
@Transactional(rollbackFor = Exception.class)
区别在于是否包含Error

场景建议
绝大多数业务代码@Transactional(rollbackFor = Exception.class) 就够了,避免误杀 Error(通常 Error 是 JVM 级问题,回滚也救不了)
你明确想连 Error 也回滚(极罕见)@Transactional(rollbackFor = Throwable.class)

6、代码逻辑复用,减少重复,提高可维护性

  • 方法复用:相似代码抽为共享方法
  • 抽象复用:利用继承和接口提取公共逻辑
  • 工具复用:抽取常用工具方法,集中管理复用
  • 构造复用:使用构造器或者builder模式创建对象,比米娜重复set方法调用

7、共享对象与线程安全

  • 单例无状态:单例对象应保持无状态,特别Spring组件,严禁添加成员变量
  • 同步机制:使用同步机制(synchronized/Lock)确保多线程共享对象访问安全
  • 警惕危险:SimpleDateFormat、ArrayList、 HashMap等非线程安全类谨慎共享使用
  • 安全容器:优先使用线程安全的AQS集合:ConcurrentHashMap等

详解:
1️⃣ “单例无状态”:

  • 单例(Singleton):Spring 默认把 @Component、@Service、@Repository、@Controller 等 Bean 做成单例,整个应用只有一份实例。
  • 无状态(Stateless):这个 Bean 不保存任何“可变”的成员变量,只提供纯函数式行为。

2️⃣ “严禁添加成员变量”
指的是**“可变”的成员变量**(尤其是与请求、会话、线程相关的数据)。
❌ 反面例子:

@Service
public class OrderService {private Order currentOrder;  // 千万别这么干!public void create(Order order) {this.currentOrder = order;  // 并发请求会互相覆盖...}
}

由于 Spring 默认单例,currentOrder 会被所有线程共享,高并发下出现数据错乱、线程安全问题。

✅ 正确姿势
用无状态方法:所有数据通过参数传入、返回值传出,不留在对象内部。

确实需要状态?

  • 用局部变量(栈私有)
  • 或者用 ThreadLocal(慎用)
  • 或者把 Bean 的 scope 改成 prototype/request/session(极少用)

8、大内存场景务必确保数量有限性,避免OOM

  • 对象池化:设置合理配置,重用高消耗对象(core-size、max-size、keeplive、queue-size)
  • 异步队列:使用有界队列,平衡生产消费速度(queue-size)
  • 大文件读写:分批读取、及时释放资源(byte buffer-size)
  • 大数据处理:分页查询,批量插入(batch-size)

9、单元测试,明确用例设计,逻辑全覆盖

  • 测试独立性:单元测试间零依赖
  • 覆盖全面:分支、便捷、异常全覆盖
  • 明确断言:精准验证预期结果
  • 用例多样:正常值、边界值、错误值

10、日志规范、格式统一、合理级别与内容管控

  • 性能优先:使用{}替代+拼接日子字符串,提升日志性能
  • 隐私保护:敏感信息必须脱敏、摘要
  • 大小控制:禁止记录大对象(如图片、文件)避免IO瓶颈
  • 级别合理:根据场景合理设置DEBUG/INFO/WARN/ERROR生产环境严禁开启DEBUG
  • 框架统一:采用日志门面模式(SLF4J 或JCL)
http://www.dtcms.com/a/286787.html

相关文章:

  • MoE,混合专家
  • pycharm结构查看器
  • 世界有色金属杂志世界有色金属杂志社世界有色金属编辑部2025年第9期目录
  • WAF能够解决数据库被渗透的问题吗?
  • Redis-集群与分区
  • 5W8-3D牢游戏超级大集合[2012年6月] 地址 + 解压密码
  • 更适合后端宝宝的前端三件套之HTML
  • 光伏系统优化布局,实现从空间利用到效能的最大化
  • 2-大语言模型—理论基础:详解Transformer架构的实现(2)
  • Redisson 分布式锁
  • 一小时学习Redis
  • 使用 jar -xvf 解压JAR文件无反应怎么办?
  • Maven私服仓库,发布jar到私服仓库,依赖的版本号如何设置,规范是什么
  • 帆软可视化图
  • mave手动下载某个依赖,到本地库
  • 更适合后端宝宝的前端三件套之JavaScript
  • /字符串/
  • 《每日AI-人工智能-编程日报》--2025年7月18日
  • Simulink 按位控制的控制DO信号变量转换为uint16类型的控制字
  • Flux Kontext Lora 模型训练环境搭建
  • 软件维护全维度解析:从修复到进化的生命周期管理
  • linux制作镜像、压缩镜像、烧录的方法
  • 虚拟机centos服务器安装
  • Linux操作系统(练习一)
  • InnoDB 多版本控制 慢sql排查(基于MySQL 5.7)
  • Altera Quartus:图形化界面配置生成jic和pof文件
  • 京东店铺入鼎的全面分析与自研难度评估
  • AE MDX L6 L12 L18 电源手侧操作使用说明
  • 智能交通4G专网解决方案,引领智慧出行新时代
  • Entity Framework (EF) 深度解析