阿里巴巴Java开发手册学习记录

Java开发手册学习

一、命名规则

  • 禁止下划线或💲开始或结束
  • 常量全部大写
  • 抽象类用Abstract或Base开头,异常类用Exception结尾,测试类用他要测试的类的名称开始,以Test结尾
  • POJO类中布尔类型的数据不要加is前缀
  • 设计模式需要体现具体设计模式
  • 接口类中的方法和属性不要加任何修饰符号,尽量不要定义变量,如果要定义,那么一定是和接口方法相关的。如果在接口中定义变量,那么一定是** public static final**的
  • 枚举类需要带上Enum后缀,枚举成员变量名称需要全大写,单词间用下划线隔开。枚举类是特殊的类,其域成员均为常量,构造方法默认强制私有
  • 各层的命名规约:

Service/DAO层方法命名规约

  • 获取单个对象的方法用get做前缀。
  • 获取多个对象的方法用list做前缀,复数形式结尾如:listObjects。
  • 获取统计值的方法用count做前缀。
  • 插入的方法用save/insert做前缀。
  • 删除的方法用remove/delete做前缀。
  • 修改的方法用update做前缀。

领域模型命名规约

  • 数据对象:xxxDO,xxx即为数据表名。
  • 数据传输对象:xxxDTO,xxx为业务领域相关的名称。
  • 展示对象:xxxVO,xxx一般为网页名称。
  • POJO是DO/DTO/BO/VO的统称,禁止命名成xxxPOJO。

二、常量定义

  1. 不允许在代码中直接定义常量
  2. 在给long或者Long类型变量赋值的时候,要在数值之后加大写的L
  3. 不要使用一个常量类要维护所有的常量,要按照常量的功能进行归类

三、代码格式

  1. 大括号的使用方法:
  • 左大括号前不换行。
  • 左大括号后换行。
  • 右大括号前换行。
  • 右大括号后还有else等代码则不换行;表示终止的右大括号后必须换行
  1. 左小括号和字符之间不出现空格,右小括号和字符之间不出现空格
  2. if / for / while / switch / do 等保留字与括号之间必须加空格
  3. 任何二目、三目运算符的左右两边都必须加空格
  4. 双斜线的注释和注释内容之间必须有且仅有一个空格
  5. 单行超过120行需要换行,第二行比第一行缩进4个字符,后面不再缩进,运算符/方法调用的点与下文一起换行,方法调用多个参数的时候在逗号之后换行
  6. 一个方法多个参数的时候需要在参数的逗号后面添加空格
  7. 单个方法的总行数不超过80行

四、OOP规约

  1. 访问一个类的静态变量或者方法直接使用类名访问
  2. 所有的覆写方法均使用@Override注解,便于判断覆写是否成功
  3. 接口过时使用@Deprecated注解,同时说明新接口或者新服务是什么
  4. 不能使用过时的类或者方法
  5. Object的equal()方法可能存在空指针问题,因此一般使用"abc".equals(object)来进行比较。
  6. 所有包装类型全部使用equals()方法进行比较,Integer对象在-128-127的时候使用==能够得到正确结果,但是在这之外的数字使用==将无法得到正确结果
  7. POJO类必须写toString()方法,如果是继承另一个类,那么就在前面加一个super.toString()
  8. split()的结果需要对最后一个进行检查,否则可能会有越界风险
  9. 一个类如果有多个构造方法/同名方法需要放在一起,类里面的方法的定义顺序是公有方法/保护方法>私有方法>getter/setter方法
  10. setter方法中不添加额外逻辑,只进行赋值
  11. 字符串连接使用StringBuilder对象,加快速度
  12. Object的clone方法是浅拷贝,慎用
  13. 类成员之间访问要很严格,方便解耦:
  • 如果不允许外部使用new来创建对象,那么构造方法为private
  • 工具类不允许有public或者default构造方法
  • 类非static成员变量并且与子类共享,必须为protectd
  • 类非static成员变量只在本类里面使用那么必须为private
  • 类static变量如果仅在本类使用那么必须是private
  • 类中含有static变量考虑其是否能够改为final
  • 类成员方法只供内部调用必须为private
  • 类成员方法只对继承类公开那么限制为protectd

五、集合处理

  1. 如果要重写equals方法那么必须重写hashCode方法,使用Set保存的对象必须重写hashCode和equals方法,Map的key必须要重写这两个方法(hashCode相等不一定equals返回true,就像HashMap中使用hashCode方法来找到同一个地方,然后使用equals方法来找到相同的元素)
  2. 集合转数组必须要使用集合的toArray()方法,传入的是类型完全一样的数组,大小为list.size()
  3. 使用Arrays.asList()把数组转为集合的时候不能使用集合相关的方法,asList()方法返回的是Arrays的一个内部类,后部数据仍然为数组,如果修改数组中的值,那么list中的值也会发生变化
  4. 不要在for each循环中尽心该元素的add()/remove()操作,使用迭代器Iterator方式进行操作,如果是并发操作的时候那么需要对Iterator对象加锁。
  5. 集合初始化的时候指定初始值大小,避免resize消耗大量时间
  6. 集合遍历尽量使用entrySet进行Map遍历,提高效率

六、 并发处理

//todo

七、控制语句

  1. switch语句要使用break/return停止,每一个switch中必须包含default语句
  2. if / else / for / while / do 语句中必须使用大括号,即使只有一行代码
  3. 在高并发场景中避免使用等于做为推出条件,应该使用大于或者小于进行判断(如果一个秒杀场景中使用商品数==0做为判断条件,在高并发场景下有可能会出现商品数由于并发变成负数而无法停止的情况
  4. 在表达异常的分支的时候,少用if-else。如果if-else的层数较深,那么直接使用卫语句的方式
  5. 循环体中的语句要考虑性能,要尽量把定义对象、变量、获取数据库连接等操作放到循环体外面,考虑能够将try-catch放到循环体之外
  6. 避免使用取反运算符
  7. 调用频次低的方法、执行时间长的方法、需要极高稳定性的方法、对外的接口、敏感权限的入口需要进行参数校验

八、 注释规约

  1. 类、类属性、类方法使用javadoc规范进行注释
  2. 所有抽象方法要使用javadoc注释,所有的类必须要添加创建者和创建日期
  3. 所有枚举类型字段都要有注释

九、其他

  1. 正则表达式的时候使用预编译功能
  2. Math.random()方法将会返回一个double类型,尽量使用Random的nextInt和next Long方法
  3. 获取时间尽量使用System.currentTimeMillis()或者System.nanoTime()方法,在jdk8中推荐使用Instant类
  4. 不要在视图模版中添加复杂逻辑操作
  5. 数据结构的初始化应该指定大小
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343