编程规范


PO:(Persistent Object)持久层对象,它是由一组属性和属性的get和set方法组成的,最简单的 PO 就是对应数据库中某个表中的一条记录

DO:与数据库表结构一一对应,通过DAO层向上传输数据源对象。

VO:展示对象,通常用于业务层之间的数据传递。
BO:业务对象。 由Service层输出的封装业务逻辑的对象。

POJO:POJO专指只有setter/getter/toString的简单类,包括DO/DTO/BO/VO等。

命名风格

Service/DAO 层方法命名规约:
1) 获取单个对象的方法用 get 做前缀。
2) 获取多个对象的方法用 list 做前缀。
3) 获取统计值的方法用 count 做前缀。
4) 插入的方法用 save(推荐)或 insert 做前缀。
5) 删除的方法用 remove(推荐)或 delete 做前缀。
6) 修改的方法用 update 做前缀。

常量定义

枚举成员名称需要全大写,单词间用下划线隔开。
DealStatusEnum : UNKOWN_REASON

接口类中的方法和属性不要加任何修饰符号(public 也不要加),保持代码的简洁性,并加上有效的 Javadoc 注释。

数组定义如下:String[] args

常量命名全部大写,单词间用下划线隔开:MAX_STOCK_COUNT

抽象类命名使用 Abstract 或 Base 开头;异常类命名使用 Exception 结尾;测试类命名以它要测试的类的名称开始,以 Test 结尾。

常量的复用层次:
1)子工程内部共享常量:即在当前子工程的 constant 目录下。
2) 包内共享常量:即在当前包下单独的 constant 目录下。
3) 类内共享常量:直接在类内部 private static final 定义。

代码格式

右大括号后还有 else 等代码则不换行;表示终止的右大括号后必须换行。

方法参数在定义和传入时,多个参数逗号后边必须加空格

集合处理

只要重写 equals,就必须重写 hashCode
因为 Set 存储的是不重复的对象,依据 hashCode 和 equals 进行判断,所以 Set 存储的对象必须重写这两个方法。

使用集合转数组的方法,必须使用集合的 toArray

不要在 foreach 循环里进行元素的 remove/add 操作。remove 元素使用 Iterator方式,如果并发操作,需要对 Iterator 对象加锁。

使用 entrySet 遍历 Map 类集合 KV,效率更高,只遍历一次
如果是 JDK8,使用 Map.foreach 方法

利用 Set 元素唯一的特性,可以快速对一个集合进行去重操作,避免使用 List 的contains 方法进行遍历、对比、去重操作。

线程安全

线程池不允许使用 Executors 去创建,而是通过 ThreadPoolExecutor 的方式
线程资源必须通过线程池提供,不允许在应用中自行显式创建线程。

多线程并行处理定时任务时,Timer 运行多个 TimeTask 时,只要其中之一没有捕获
抛出的异常,其它任务便会自动终止运行,使用 ScheduledExecutorService 则没有这个问题。

子线程抛出异常堆栈,不能在主线程 try-catch 到

控制语句

在一个 switch 块内,都必须包含一个 default 语句并且放在最后,即使它什么代码也没有。

在 if/else/for/while/do 语句中必须使用大括号。即使只有一行代码,避免使用单行的形式

不要在条件判断中执行其它复杂的语句

注释规范

使用 /** **/ 格式来注释

其它

多用正则表达式

异常

Java 类库中定义的一类 RuntimeException 可以通过预先检查进行规避,而不应该
通过 catch 来处理,如:IndexOutOfBoundsException,NullPointerException等
示例:if (obj != null) {...}

对大段代码进行 try-catch,这是不负责任的表现。最外层的业务使用者,必须处理异常,将其转化为用户可以理解的内容。

定义时区分 unchecked / checked 异常,避免直接抛出 new RuntimeException(),更不允许抛出 Exception 或者 Throwable,应使用有业务含义的自定义异常。推荐业界已定义过的自定义异常,如:DAOException / ServiceException 等

在代码中使用“抛异常”还是“返回错误码”,对于公司外的 http/api 开放接口必须
使用“错误码”

SQL语句

不要使用 count(列名)来替代 count(),count()跟数据库无关,跟 NULL 和非 NULL 无关。count()会统计值为 NULL 的行,而 count(列名)不会统计此列为 NULL 值的行。*

当某一列的值全是 NULL 时,count(col)的返回结果为 0,但 sum(col)的返回结果为NULL,因此使用 sum()时需注意 NPE 问题

不得使用外键与级联,一切外键概念必须在应用层解决。
学生表中的 student_id 是主键,那么成绩表中的 student_id 则为外键。
如果更新学生表中的 student_id,同时触发成绩表中的 student_id 更新,则为级联更新
外键与级联更新适用于单机低并发,不适合分布式、高并发集群;级联更新是强阻塞,存在数据库更新风暴的风险;外键影响数据库的插入速度

in 操作能避免则避免,若实在避免不了,需要仔细评估 in 后边的集合元素数量,控制在 1000 个之内。

不允许直接拿 HashMap 与 Hashtable 作为查询结果集的输出。

@Transactional 事务不要滥用。事务会影响数据库的 QPS(每秒钟处理请求的次数)

IDEA 快捷键:

⌥⌫ 删除到单词的开头 option+delete
⌘⌥L 格式化代码 command+option+L
command + shift + 上下箭头
shift + Tab键 缩进代码

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,233评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,013评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,030评论 0 241
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,827评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,221评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,542评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,814评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,513评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,225评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,497评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,998评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,342评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,986评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,055评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,812评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,560评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,461评论 2 266

推荐阅读更多精彩内容

  • 现代社会似乎有一种通病叫做焦虑病。与许多朋友聊天,他们似乎都有这病的发作经历。 例如,S小姐。她在众人眼里是值得羡...
    小田田8585阅读 341评论 0 0
  • 一次偶然翻到了简书中一位作者的文章,要招募有意向一起写作的人,要求是每天原创500字,坚持100天。当初...
    潘多拉简书阅读 295评论 3 8
  • 晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷,渔人甚异之。复...
    刘伟书法_沈阳阅读 1,621评论 0 7
  • “#本文参加‘青春大赛’,本人保证本文为本人原创,如有问题则与主办方无关,自愿放弃评优评奖资格”。 作者:李自强 ...
    少年去游荡阅读 472评论 0 2
  • 都说“活到老,学到老”。我们人生中的老师不止是学生时代站在讲台上的老师,所有指导和教育过我们的人都应该被感谢。比如...
    程之遥阅读 458评论 4 5