💻
QMMMS的笔记
博客
  • QMMMS的笔记
  • agent
    • MCP的背景、原理和开发
    • Agent 历史与背景
    • Agentic Workflows
    • 环境检查与基础工具
    • Tool Call
    • 工具与运行时的值
    • temp
    • 处理 Tool Call error
    • trick
  • algorithm
    • 线性结构
    • 二叉树
    • 图
    • 查找
    • 排序
    • 动态规划
    • 优化方法
    • 数学
    • 迁移至Java
  • computer_composition
    • 系统总线
    • 存储器
    • 输入输出系统
    • 计算机的运算方法
    • 指令系统
    • 补充
  • computer_network
    • 引入
    • 应用层
    • 传输层
    • 网络层(数据平面)
    • 网络层(控制平面)
    • 链路层
    • 常见问答
    • 实验
  • database
    • SQL实战
    • 关系代数
    • 数据库设计
    • 规范化
    • 数据库基本概念
    • 查询原理
    • 数据库恢复技术
    • 并发控制
  • dev_tools
    • Git
    • Nginx
    • Spring
    • LangChain
    • PyTorch Cheat Sheet
    • MyBatis
    • MySQL Cheat Sheet
    • MySQL 补充
    • Redis
    • Docker
    • RocketMQ
    • Chrome
  • linux
    • Linux基础命令与使用
    • 文件与权限
    • 文件与目录操作
    • 权限属性高级
    • 命令与文件的查找
    • 文件压缩和打包
    • vim编辑器
    • shell变量
    • 命令补充
    • 数据流重定向
    • 管道命令
    • shell脚本
    • 用户管理
    • 用户间交流
    • 计划任务
    • 进程管理
    • 软件管理
    • 认识系统服务
    • 运维常用命令
    • 常用命令
  • llm
    • 大规模语言模型概述
    • 分布式训练概述
    • 有监督微调概述
    • 强化学习与LLM
    • LLM评估概述
    • 大模型应用
    • 理解大模型
    • 量化
    • 预训练
    • 上下文学习
  • machine_learning
    • 引入
    • 大致正确学习
    • 一致收敛
    • 偏差还是过拟合?
    • 可学习的充要条件
    • 非均匀可学习性
    • 计算复杂性
  • mathematics
    • 概率与统计基础
    • 线性代数基础
  • operating_system
    • 操作系统基本概念
    • 进程和线程
    • 同步,互斥与死锁
    • 内存管理
    • 文件系统
    • I/O系统
    • 保护与安全
    • 《现代操作系统》
  • statistical_learning
    • 统计学习引入
    • 线性回归
    • 分类
    • 重抽样方法
    • 线性模型选择与正则化
    • 非线性模型
    • 基于树的方法
    • 支持向量机
    • 无指导学习
    • 马尔科夫链和蒙托卡罗方法简明理解
    • R语言速查
  • deep_learning
    • basic_concepts
      • 逻辑回归与损失函数
      • 神经网络
      • 正则化、预处理、权重初始化
      • 优化算法
      • 机器学习策略
      • 复习:从计算机视觉的角度
      • 卷积神经网络
      • 深度卷积网络示例
      • 计算机视觉任务
      • 循环神经网络
      • 自然语言处理任务
      • 注意力
      • Transformers 家族
      • 显卡扫盲
      • 强化学习概述
    • semi-supervise
      • 半监督学习简介
      • Consistency Regularization
      • Proxy-label Methods
      • Holistic Methods
      • Generative Models
      • Graph-Based SSL
      • Self-Supervision for SSL
      • Other SSL methods
  • programming
    • cpp
      • STL
      • C++基础
      • 内存管理
      • 面向对象
    • java
      • 环境和介绍
      • 注释
      • String
      • 面向对象思想
      • Object
      • 包
      • 访问权限修饰符
      • 初始化块
      • 接口
      • 内部类
      • 注解
      • 枚举
      • 集合框架
      • List
      • Map
      • 泛型
      • 迭代
      • IO与流
      • 序列化
      • 异常
      • Lambda
      • Stream流
      • Socket
      • 缓冲
      • 命名规范
      • 拆箱装箱
      • 值传递
      • 深拷贝
      • 反射
      • JVM
      • 并发编程基础
    • python
      • 并发编程
      • 环境管理
  • software_engineering
    • basic_concepts
      • 系统分析与设计概述
      • 规划
      • 需求分析与原型设计
      • 项目管理
      • 建模
      • 数据库设计
      • 架构
      • 配置管理
      • 测试管理
      • 安全
      • 编码原则
      • 微服务
      • 补充内容
    • software_testing
      • CMMI基础
      • PPQA与SQA
      • 软件测试基础
      • 黑盒测试
      • 白盒测试
      • 集成测试
      • 系统测试
      • 测开面试补充
由 GitBook 提供支持
在本页
  • 包(package)
  • 类(class)
  • 接口(interface)
  • 字段(field)和变量(variable)
  • 常量(constant)
  • 方法(method)
  • 其他规则
在GitHub上编辑
  1. programming
  2. java

命名规范

上一页缓冲下一页拆箱装箱

最后更新于10个月前

包(package)

包的命名应该遵守以下规则:

  • 应该全部是小写字母

  • 点分隔符之间有且仅有一个自然语义的英语单词

  • 包名统一使用单数形式,比如说 com.itwanger.util 不能是 com.itwanger.utils

  • 在最新的 Java 编程规范中,要求开发人员在自己定义的包名前加上唯一的前缀。由于互联网上的域名是不会重复的,所以多数开发人员采用自己公司(或者个人博客)在互联网上的域名称作为包的唯一前缀。比如我文章中出现的代码示例的包名就是 package com.itwanger。

类(class)

类的命名应该遵守以下规则:

  • 必须以大写字母开头

  • 最好是一个名词,比如说 System

  • 类名使用 UpperCamelCase(驼峰式命名)风格

  • 尽量不要省略成单词的首字母,但以下情形例外:DO/BO/DTO/VO/AO/PO/UID 等

另外,如果是抽象类的话,使用 Abstract 或 Base 开头;如果是异常类的话,使用 Exception 结尾;如果是测试类的话,使用 Test 结尾。

接口(interface)

接口的命名应该遵守以下规则:

  • 必须以大写字母开头

  • 最好是一个形容词,比如说 Runnable

  • 尽量不要省略成单词的首字母

来看个例子:

interface Printable {}

接口和实现类之间也有一些规则:

  • 实现类用 Impl 的后缀与接口区别,比如说 CacheServiceImpl 实现 CacheService 接口

  • 或者,AbstractTranslator 实现 Translatable 接口

字段(field)和变量(variable)

字段和变量的命名应该遵守以下规则:

  • 必须以小写字母开头

  • 可以包含多个单词,第一个单词的首字母小写,其他的单词首字母大写,比如说 firstName

  • 最好不要使用单个字符,比如说 int a,除非是局部变量

  • 类型与中括号紧挨相连来表示数组,比如说 int[] arrayDemo,main 方法中字符串数组参数不应该写成 String args[]

  • POJO 类中的任何布尔类型的变量,都不要加 is 前缀,否则部分框架解析会引起序列化错误,我自己知道的有 fastjson

  • 避免在子类和父类的成员变量之间、或者不同代码块的局部变量之间采用完全相同的命名,使可理解性降低。子类、父类成员变量名相同,即使是 public 类型的变量也能够通过编译,另外,局部变量在同一方法内的不同代码块中同名也是合法的,这些情况都要避免。

什么是 POJO 呢,就是 Plain Ordinary Java Object 的缩写,一般在 Web 应用程序中建立一个数据库的映射对象时,我们称它为 POJO,这类对象不继承或不实现任何其它 Java 框架的类或接口。

反例:

public class ConfusingName {
    public int stock;

    // 非 setter/getter 的参数名称,不允许与本类成员变量同名
    public void get(String alibaba) {
        if (condition) {
            final int money = 666;
			// ...
        }
        for (int i = 0; i < 10; i++) {
            // 在同一方法体中,不允许与其它代码块中的 money 命名相同 final int money = 15978;
            // ...
        }
    }
}

class Son extends ConfusingName {
	// 不允许与父类的成员变量名称相同 public int stock;
}

常量(constant)

常量的命名应该遵守以下规则:

  • 应该全部是大写字母

  • 可以包含多个单词,单词之间使用“_”连接,比如说 MAX_PRIORITY,力求语义表达完整清楚,不要嫌名字长

  • 可以包含数字,但不能以数字开头

来看个例子:

static final int MIN_AGE = 18;  

方法(method)

方法的命名应该遵守以下规则:

  • 必须以小写字母开头

  • 最好是一个动词,比如说 print()

  • 可以包含多个单词,第一个单词的首字母小写,其他的单词首字母大写,比如说 actionPerformed()

来看个例子:

void writeBook(){}

Service/DAO 层的方法命名规约:

  • 获取单个对象的方法用 get 做前缀

  • 获取多个对象的方法用 list 做前缀,复数结尾,如:listObjects

  • 获取统计值的方法用 count 做前缀

  • 插入的方法用 save/insert 做前缀

  • 删除的方法用 remove/delete 做前缀

  • 修改的方法用 update 做前缀

其他规则

  • 代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。反例:_name / __name / $name / name_ / name$ / name__

  • 所有编程相关的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。反例:DaZhePromotion [打折] / getPingfenByName() [评分] / String fw[福娃] / int 某变量 = 3

  • 代码和注释中都要避免使用任何语言的种族歧视性词语。反例:RIBENGUIZI / Asan / blackList / whiteList / slave

  • 方法名、参数名、成员变量、局部变量都统一使用 lowerCamelCase 风格。

  • 杜绝完全不规范的缩写,避免望文不知义。反例:AbstractClass “缩写”成 AbsClass;condition “缩写”成 condi;Function 缩写”成 Fu,此类随意缩写严重降低了代码的可阅读性。

  • 为了达到代码自解释的目标,任何自定义编程元素在命名时,使用尽量完整的单词组合来表达。

  • 在常量与变量的命名时,表示类型的名词放在词尾,以提升辨识度。正例:startTime / workQueue / nameList / TERMINATED_THREAD_COUNT

  • 如果模块、接口、类、方法使用了设计模式,在命名时需体现出具体模式。 将设计模式体现在名字中,有利于阅读者快速理解架构设计理念。比如说:public class OrderFactory;public class LoginProxy;public class ResourceObserver;

  • 枚举类名带上 Enum 后缀,枚举成员名称需要全大写,单词间用下划线隔开。枚举其实就是特殊的常量类,且构造方法被默认强制是私有。比如说:枚举名字为 ProcessStatusEnum 的成员名称:SUCCESS / UNKNOWN_REASON。