Java的命名规范

3.9.3 命名规则

除了 保留字 和 关键字,其余的命名都要遵循一些规则或规范

  • 工程命名:首字母大写,多个单词间使用下划线分隔,尽量使用英文简称 示例: Springboot_01_quickstart
  • 包命名:纯小写英文字母,采用顶级域名作为前缀,例如com、net、org、edu、gov、cn、io等,随后紧跟 公司/组织/个人名称以及功能模块名称 示例:
    package org.springframework.boot.autoconfigure.cloud
    package org.springframework.boot.util
    package java.beans
    package java.io
  • 类命名:通常采用名词进行命名,每个单词首字母都要大写,不建议缩写(一些约定俗称的除外) 示例:
    class EmployeeService{
    ​
    }
    class StudentDAO{
  • 接口命名:通常采用形容词或动词来描述接口的动作行为 示例:
    public interface Runnable{
    ​
    }
    public interface Comparable<T>{
    ​
    }
    public interface CompletionService<V>{
    ​
    }
    在Spring Framework标准库中,通常采用 "名词 + 动词/形容词"来命名接口 示例:
    public interface AfterAdvice{
    ​
    }
    public interface TargetClassAware{
    ​
    }
  • 接口实现类:在接口名的基础上将 "Impl"作为后缀 示例:
    public interface OrderService{
    ​
    }
    public class OrderServiceImpl implements OrderService{
    ​
    }
  • 抽象类命名:在普通类的命名基础上,以 "Abstract/Base"作为前缀 示例:
    public abstract class AbstractController{
    ​
    }
    public abstract class BaseDao<T,ID>{
    ​
    }
    以下是Spring Framework中常见的抽象类示例
    public abstract class AbstractAspectJAdvice{
    ​
    }
  • 异常类命名:对于编码、环境和操作等异常,在普通类命名基础上,以 "Exception"作为后缀 示例:
    public class ClassNotFoundException{
    ​
    }
    另外,Java中还有一种系统异常,这类异常类命名使用 "Error"作为后缀 示例:
    public class NoClassDefFoundError{
    ​
    }
  • 方法命名:首字母小写,多个单词则从第二个单词开始,使用驼峰命名方法进行书写,一般采用 "动词 /动词 + 名词" 示例:
    public List<Integer> getUserIds(){
    ​
    }
    public User getOne(){
    ​
    }
  • 方法查询:对于查询或筛选获取数据的方法,通常采用 "find/query"作为前缀 示例:
    public List<Integer> findAll(){
    ​
    }
    public List<String> queryOrders(){
    ​
    }
  • 方法条件查询:一个查询方法需要条件参数,则可以使用 "by/with"等字符作为方法名中条件的连接符
    public User findByUsername(String username){
    ​
    }
    public List<Integer> getUserIdsWithState(boolean state){
    ​
    }
    public List<User> findAllByUsernameOrderByIdDesc(String username){
    ​
    }
  • 方法设置:对于设置(set)、插入(insert)、修改(update)、删除(delete)等操作,应该将对应的动词作为其名词的前缀 示例:
    public void setName(String name){
    ​
    }
    public User insert(User user){
    ​
    }
    public void update(User user){
    ​
    }
    public void clearAll(){
    ​
    }
  • 返回值Boolean方法:方法的返回值为布尔类型,应该使用 "is/has"作为前缀 示例:
    public boolean isNotEmpty(){
    ​
    }
    public boolean hasLength(){
    ​
    }
  • 获取长度/数量方法:用于获取数据长度或者数量的方法,应该使用 length或者size命名 示例:
    public long length(){
    ​
    }
    public int size(){
    ​
    }
  • 数据类型转换方法:用于将数据类型转换其他类型的方法,则可以使用 "to"作为前缀 示例:
    public Set<Integer> mapToSet(Map map){
    ​
    }
    public UserDto convertTo(User user){
    ​
    }
    public String toString(Object obj){
    ​
    }
  • 变量命名:与方法命名一样,以小写字母开头,多个单词从第二个单词开始首字母大写,不建议使用下划线作为分隔符号 示例:
    private Long id;
    private String username;
    private Long orderId;
  • 常量命名规范:全部大写,多个单词之间使用下滑线进行分隔 示例:
    public static final String LOGIN_USER_SESSION_KEY = "current_login_user";
    public static final int MAX_AGE_VALUE = 120;
  • 枚举命名:与普通类一样,每个单词首字母都大写,而枚举类中定义的值遵循常量的命名规范,枚举值名称需要与类名有一定的关联性 示例:
    public enum Color{
        RED,YELLOW,BLUE,GREEN,WHITE;
    }
    public enum PhysicalSize{
        TINY,SMALL,MEDIUM,LARGE,HUGE,GIGANTIC;
    }
  • 数组: 示例:
    int array[] = new int[10];
    int idArray[] ={1,2,3,4,5};
    String nameArray[] = {"First","Yellow","Big"}
    ​
    public List<String> getNameById(Integer ids[]){
    ​
    }
  • 复数或者集合:描述多个数据的变量名,尽量使用单词的复数形式 示例:
    Collection<Order> orders;
    int values[];
    List<Item> items;
  • 泛型类:在书写泛型类时,通常遵循以下的约定
    • E表示Element,通常表示集合元素

    • ID用于表示对象的唯一标识符类型

    • T表示Type(类型),通常表示Java类

    • K表示Key(键),通常用于Map中

    • V表示Value(值),通常用于Map中,于K成对出现

    • N表示Number,通常表示数值类型

    • ? 表示不确定的Java类型

    • X表示异常

    • U,S表示任意的类型

    示例:
    public class HashSet<E> extends AbstractSet<E>{
    ​
    }
    public class HashMap<K,V> extends AbstractMap<K,V>{
    ​
    }
    public class ThreadLocal<T>{
    ​
    }
    public interface Functor<T,X extends Throwable>{
        T val() throws X;
    }
    public class Container<K,V>{
        private K key;
        private V value;
        Container(K key,V value){
            this.key = key;
            this.value = value;
        }
    ​
    }
    ​
    public interface BaseRepository<T,ID>{
        T findById(ID id);
    ​
        void update(T t);
    ​
        List<T> findByIds(ID...ids);
    }
    ​
    public static <T> List<T> methodName(Class<T> clz){
        List<T> dataList = getByClz(clz);
        return dataList;
    }
  • 测试类和测试方法:测试类采用 "被测试业务模块名/被测试接口/被测试类 + Test"进行书写,测试方法采用 "test + 用例操作_状态的组合"进行书写 示例:
    public class UserServiceTest{
    ​
        public void testFindByUsernameAndPassword(){
    ​
        }
    ​
        public void testUsernameExist_notExist(){
    ​
        }
    ​
        public void testDeleteById_isOk(){
    ​
        }
    }

补充,变量命名

推荐的命名规范有以下3种:

(1)Camel标记法:首字母是小写的,接下来的单词都以大写字母开头。

(2)Pascal标记法:首字母是大写的,接下来的单词都以大写字母开头。

(3)匈牙利标记法:在以Pascal标记法的变量前附加小写序列说明该变量的烈性。它使用1-3字符前缀表示数据类型,3个字符的前缀必须小写,前缀后面是由表意性强的一个单词或多个单词组成的名字,而且每个单词的首写字母大写,其他字母小写。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值