一、编程规约

(三) 格式规约

1. 【强制】大括号的使用约定。如果是大括号内为空,则简洁地写成{}即可,不需要换行;如果是非空代码块则:

1) 左大括号前不换行。行。 2) 左大括号后换行。 3) 右大括号前换行。 4) 右大括号后还有else等代码则不换行;表示终止右大括号后必须换行。

2. 【强制】 左括号和后一个字符之间不出现空格;同样,右括号和前一个字符之间也不出现空格。详见第5条下方正例提示。

3. 【强制】if/for/while/switch/do等保留字与左右括号之间都必须加空格。

4. 【强制】任何运算符左右必须加一个空格。 说明:运算符包括赋值运算符=、逻辑运算符&&、加减乘除符号、三目运行符等。

5. 【强制】代码块缩进4个空格,如果使用tab缩进,请设置成1个tab为4个空格。 正例: (涉及1-5点

public static void main(String args[]) {
String say = "hello";
// 运算符的左右必须有一个空格
int flag = 0;
// 关键词if与括号之间必须有一个空格,括号内f与左括号,1与右括号不需要空格
if (flag == 0) {
System.out.println(say);
} // 左大括号前加空格且不换行;左大括号后换行
if (flag == 1) {
System.out.println("world");
// 右大括号前换行,右大括号后有else,不用换行
} else {
System.out.println("ok");
// 右大括号做为结束,必须换行
}
}

(八)注释规约

1.【强制】类、类属性、类方法的注释必须使用Javadoc规范。使用/** 内容 */格式,不得使用// xxx方式。

  说明:再IDE编辑窗口中,Javadoc方式会提示相关注释,生成Javadoc可以正确输入出相应注释;再IDE中,工程调用方法时,不进入方法即可悬浮提示方法、参数、返回值的意义,提高阅读效率。

2.【强制】所有的抽象方法(包括接口中的方法)必须用Javadoc注释、除了返回值、参数、异常说明外,还必须指出该方法做什么事情,实现什么功能。

  说明:对子类的实现要求,或者调用注意事项,请一并说明。

5.【强制】所有的枚举类型字段必须要有注释,说明每个数据项的用途。

 二、异常日志

(一)异常处理

4.【强制】捕获异常时为了处理它,不要捕获了却什么都不处理而抛弃之,如果不想处理它,请将该异常抛给它的调用者。最外层的业务使用者必须处理异常,将其转化为用户可以理解的内容。

7.【强制】不要在finally块中使用return。

  说明:finally块中的return返回后方法结束执行,不会再执行try块中的return语句。

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

12.【参考】对于公司外的http/api开放接口必须使用”错误码“;而应用内部推荐异常抛出;跨应用间RPC调用优先考虑使用Result方式,封装isSuccess()方法、”错误码“、”错误简短信息“。

  说明:关于RPC方法返回方式使用Result方式的理由:

  1)使用抛异常返回方式,调用方如果没有捕获到就会产生运行时错误。

  2)如果不加栈信息,只是new 自定义异常,加入自己的理解error message,对于调用端解决问题的帮助不会太多。如果加了栈信息,在频繁调用出错的情况下,数据序列化和传输的性能损耗也是问题。

(二)日志规约

1.【强制】应用中不可直接使用日志系统(Log4j、Logback)中的API,而应依赖使用日志框架SLF4J中的API,使用门面模式的日志框架,有利于维护和各个类的日志处理方式统一。

  

import org.slf4j.Logger;
import org.slf4j.LoggerFactory; private static final Logger logger = LoggerFactory.getLogger(Abc.class);

 3.【强制】应用中的扩展日志(如打点、临时监控、访问日志等)命名方式:

  appName_logType_logName.log。

  logType:日志类型,如stats/monitor/access等;logName:日志描述。这种命名的好处;通过文件名就可以知道日志文件属于什么应用,什么类型,什么目的,也有利于归类查找。

  正例:mppserver应用中单独监控时区转化异常,如:

  mppserver_monitor_timeZoneConvert.log

  说明:推荐对日志进行分类,如将错误日志和业务日志分开存放,便于开发人员查看,也便于通过日志对系统进行及时监控。

 4.【强制】对trace/deug/info级别的日志输出,必须使用条件输出形式或者使用占位符的方式。

  说明:

logger.debug("Processing trade with id: " + id + " and symbol: " + symbol);

  如果日志级别时warn,上述日志不会打印,但是会执行字符串拼接操作,如果symbol是对象,会执行toString()方法,浪费了系统资源,执行了上述操作,最终日志却没有打印。

  正例:(条件)建议采用如下方式

  

if(logger.isDebugEnabled()){
logger.debug("Processing trade with id: " + id + ” and symbol: “ + symbol);
}

  正例:(占位符)

  logger.debug("Processing trade with id: {} and symbol : {} ", id ,symbol );

 6.【强制】异常信息应包括两类信息:案发现场信息和异常堆栈信息。如果不处理,那么通过关键字throws往上抛出。

  正例:logger.error (各类参数或者对象toString() + "_" + e.getMessage(),e);

五、MySQL数据库

(三)SQL语句

  1.【强制】不要使用count(列名)或count(常量)来替代count(*),count(*)是SQL92定义的标准统计行数的语法,跟数据库无关,跟NULL和非NULL无关。

  说明:count(*)会统计值为NULL的行,而count(列名)不会统计此列为NULL值的行。

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

  正例:SELECT IF( ISNULL( SUM(g) ), 0 ,SUM(g)) FROM table;

  

阿里巴巴Java开发手册(格式规约篇)——查自己的漏-补自己的缺的更多相关文章

  1. 阿里巴巴Java开发手册-命名规约

    1. [强制] 代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束.反例: _name / __name / $Object / name_ / name$ / Object$2. ...

  2. 阿里巴巴java开发手册 注释规约

  3. Alibaba Java开发手册索引规约学习笔记

    最近一段时间再看阿里巴巴 Java开发手册索引规约,写篇帖子总结一下,索引规约内容如下 为了通用,更为了避免造数据的痛苦,文中所涉及表.数据,均来自于MySQL官网提供的示例库employees,可通 ...

  4. 读阿里巴巴Java开发手册v1.2.0之编程规约有感【架构篇】

     不为过去蹉跎,改变当下. 为什么开篇就送这么一句话给大家,我相信很多处于1-3年码龄的哥们儿们,在平时的编码历程中编码的个性可能是多彩的,每个人都有每个人特定的风格,但是我们现在这么随意写,以后这么 ...

  5. 《阿里巴巴Java开发手册v1.2》解析(编程规约篇)

    之前在乐视天天研究各种底层高大上的东西,因为我就一个人,想怎么弄怎么弄.如今来了新美大,好好研读一下<阿里巴巴Java开发手册v1.2>.还要对这么看似简单的东西解析一番.毕竟现在带团队, ...

  6. 《阿里巴巴Java开发手册》代码格式部分应用——idea中checkstyle的使用教程

    <阿里巴巴Java开发手册>代码格式部分应用--idea中checkstyle的使用教程 1.<阿里巴巴Java开发手册> 这是阿里巴巴工程师送给各位软件工程师的宝典,就像开车 ...

  7. 读阿里巴巴Java开发手册v1.2.0之工程结构有感【架构篇】

    首先,把昨天那俩条sql语句的优化原因给大家补充一下,第一条效率极低,第二条优化后的,sql语句截图如下: 经过几个高手的评论和个人的分析: 第一条sql语句查询很慢是因为它首先使用了in关键字查询, ...

  8. 【阿里巴巴Java开发手册1.7.0(嵩山版)】编程规约&MySQL 数据库规约

    阿里巴巴Java开发手册1.7.0(嵩山版) 一.编程规约 (一)命名风格 所有命名不得以下划线和$开始和结束. 所有命名不得以拼音或拼音英文混合. 类名使用UpperCamelCase风格. 方法名 ...

  9. 阿里巴巴Java开发手册及Java代码规约扫描eclipse和IDEA插件

    <阿里巴巴Java开发手册>: https://github.com/alibaba/p3c/blob/master/%E9%98%BF%E9%87%8C%E5%B7%B4%E5%B7%B ...

  10. 阿里巴巴 Java 开发手册(三): 代码格式

    1. [强制]大括号的使用约定.如果是大括号内为空,则简洁地写成{}即可,不需要换行:如果 是非空代码块则: 1) 左大括号前不换行. 2) 左大括号后换行. 3) 右大括号前换行. 4) 右大括号后 ...

随机推荐

  1. Maven 教程(20)— 使用maven-assembly-plugin插件来定制化打包

    原文地址:https://blog.csdn.net/liupeifeng3514/article/details/79777976 简单的说,maven-assembly-plugin 就是用来帮助 ...

  2. kali渗透

    局域网-断网&劫持(kali)   1.查看局域网中的主机 fping –asg 192.168.1.0/24 2.断网 arpspoof -i wlan0 -t 192.168.100 19 ...

  3. Xamarin.Android 6.0以后开启权限方法

    Android 6.0 版本以上一些危险权限只能在运行的时候依次询问用户是否赋予,所以在开发的时候使用 RequestPermissions 方法单独请求所需要的权限. 代码: //开启相机权限 if ...

  4. C# 杀掉系统中的进程

    杀掉系统进程之前首先要知道进程名称(说了句废话),这里要注意在任务管理器中的进程名称不一定是真实的名称.打个比方,我们开启一个"记事本",任务管理器中进程名称为"记事本& ...

  5. Python 3 + Selenium 3 简单入门学习示例 126邮箱登录

    这是一个很多基础演示的书上的例子,但是一般按照这些书上的代码可能都不能成功登录.也许是网易修改了126的页面导致的吧,下面给出最新的能够work的版本 from selenium import web ...

  6. myeclipse导入项目中文乱码怎么解决教程

    大家在Myeclipse导入项目的时候,应该都遇见过一些乱码的问题,不单单只是Myeclipse有这个问题,那么怎么解决Myeclipse导入项目乱码的问题呢,问题出现的原因是什么呢,下面来看看答案. ...

  7. Java学习:方法的使用与注意事项

    方法的使用与注意事项 定义一个方法的格式:public static void 方法名称(){ 方法体 } 如何调用方法,格式: 方法名称(): 方法名称的命名规则和变量一样,使用小驼峰. 方法体:也 ...

  8. java中各种常见的异常

    一.各种常见的异常 在上一节中程序如果你注意留意,程序抛出的异常是:java.lang.ArithmeticException.这个异常是在lang包中已经定义的.在lang包中还定义了一些我们非常常 ...

  9. asp获取access数据库中的一条随机记录

    针对“用一条SQL得到数据库中的随机记录集”问题在网上已经有很多答案了: SQL Server 2000: SELECT TOP n * FROM tanblename ORDER BY NEWID( ...

  10. 推荐算法之Thompson(汤普森)采样

    如果想理解汤普森采样算法,就必须先熟悉了解贝塔分布. 一.Beta(贝塔)分布 Beta分布是一个定义在[0,1]区间上的连续概率分布族,它有两个正值参数,称为形状参数,一般用α和β表示,Beta分布 ...