zoukankan      html  css  js  c++  java
  • Gao_JAVA编程规约

    JAVA编程规约

    (一)缩进

    【强制】缩进采用4个空格,禁止使用tab字符。

    说明:如果使用tab缩进,必须设置1个tab为4个空格。IDEA设置tab为4个空格时,请勿勾选Use tab character;而在eclipse中,必须勾选insert spaces for tabs。

    正例:(涉及1-5点)
    public static void main(String args[]) {
    	//缩进4个空格
    	String say = "hello";
    	//运算符的左右必须有一个空格
    	int flag = 0;
    	//关键词if与括号之间必须有一个空格,括号内的f与左括号,0与右括号不需要空格
    	if (flag == 0) {
    		System.out.println(say);
    	}
    	//左大括号前加空格且不换行;左大括号后换行
    	if (flag == 1) {
    		System.out.println("world");
    		//右大括号前换行,右大括号后有else,不用换行
    	} else {
    		System.out.println("ok");
    		//在右大括号后直接结束,则必须换行
    	}
    }
    

    (二)变量命名

    1.【强制】代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。

    反例: _name / __name / $Object / name_ / name$ / Object$
    

    2.【强制】代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。

    说明:正确的英文拼写和语法可以让阅读者易于理解,避免歧义。
    注意,即使纯拼音命名方式也要避免采用。

    反例: DaZhePromotion [打折] / getPingfenByName()  [评分] / int某变量 = 3
    正例: alibaba / taobao / youku / hangzhou等国际通用的名称,可视同英文。
    

    3.【强制】成员变量、局部变量都统一使用lowerCamelCase风格,必须遵从驼峰形式。参数变量统一小写。

    正例: localValue / getHttpMessage() /  inputUserId
    

    4.【强制】中括号是数组类型的一部分,数组定义如下:String[] args;

    反例:请勿使用String  args[]的方式来定义。
    

    5.【强制】POJO类中布尔类型的变量,都不要加is,否则部分框架解析会引起序列化错误。

    反例:定义为基本数据类型boolean isSuccess;的属性,
    它的方法也是isSuccess(),RPC框架在反向解析的时候,“以为”对应的属性名称是success,导致属性获取不到,进而抛出异
    常。
    

    6.【强制】杜绝完全不规范的缩写,避免望文不知义。

    反例: AbstractClass“缩写”命名成AbsClass;condition“缩写”命名成 condi,此类随意缩写严重降低了代码的可阅读性。
    

    (三)每行最多字符数

    【强制】单行字符数限制不超过 120个,超出需要换行,换行时遵循如下原则:

    • 第二行相对第一行缩进 4个空格,从第三行开始,不再继续缩进,参考示例。
    • 运算符与下文一起换行。
    • 方法调用的点符号与下文一起换行。
    • 在多个参数超长,逗号后进行换行。
    • 在括号前不要换行,见反例。
    正例:
    StringBuffer sb = new StringBuffer();
    //超过120个字符的情况下,换行缩进4个空格,并且方法前的点符号一起换行
    sb.append("zi").append("xin")...
    	.append("huang")...
    	.append("huang")...
    	.append("huang");
    反例:
    StringBuffer sb = new StringBuffer();
    //超过120个字符的情况下,不要在括号前换行
    sb.append("zi").append("xin")...append
    	("huang");
    //参数很多的方法调用可能超过120个字符,不要在逗号前换行
    method(args1, args2, args3, ...
    	, argsX);
    

    (四)函数最大行数

    【强制】一个函数的有效语句不超过100行,超出需要进行优化。有效语句不包括空行,单括号行,注释行等。

    (五)函数、类命名

    1.【强制】代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。

    反例: _name / __name / $Object / name_ / name$ / Object$
    

    2.【强制】代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。

    说明:正确的英文拼写和语法可以让阅读者易于理解,避免歧义。
    注意,即使纯拼音命名方式也要避免采用。

    反例: DaZhePromotion [打折] / getPingfenByName()  [评分] / int某变量 = 3
    正例: alibaba / taobao / youku / hangzhou等国际通用的名称,可视同英文。
    

    3.【强制】类名使用UpperCamelCase风格,必须遵从驼峰形式,但以下情形例外:(领域模型的相关命名)DO / BO / DTO / VO等。

    正例:MarcoPolo / UserDO / XmlService / TcpUdpDeal /   TaPromotion
    反例:macroPolo / UserDo / XMLService / TCPUDPDeal /   TAPromotion
    

    4.【强制】方法名、参数名都统一使用lowerCamelCase风格,必须遵从驼峰形式。

    正例: localValue / getHttpMessage() /  inputUserId
    

    5.【强制】抽象类命名使用Abstract或Base开头;测试类命名以它要测试的类的名称开始,以Test结尾。
    6.【强制】杜绝完全不规范的缩写,避免望文不知义。

    反例: AbstractClass“缩写”命名成AbsClass;condition“缩写”命名成 condi,此类随意缩写严重降低了代码的可阅读性。
    

    7.【参考】各层命名规约:

    • Service/DAO层方法命名规约

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

    (六)常量

    1.【强制】常量命名全部大写,单词间用下划线隔开,力求语义表达完整清楚,不要嫌名字长。

    正例: MAX_STOCK_COUNT
    反例: MAX_COUNT
    

    2.【强制】不允许出现任何魔法值(即未经定义的常量)直接出现在代码中。

    反例: String key="Id#taobao_"+tradeId;
    cache.put(key,  value);
    

    3.【强制】long或者Long初始赋值时,必须使用大写的L,不能是小写的l,小写容易跟数字1混淆,造成误解。

    说明:Long a = 2l;写的是数字的21,还是Long型的2?

    4.【推荐】如果变量值仅在一个范围内变化用Enum类。如果还带有名称之外的延伸属性,必须使用Enum类,下面正例中的数字就是延伸信息,表示星期几。

    正例:publicEnum{MONDAY(1),TUESDAY(2),WEDNESDAY(3),THURSDAY(4),FRIDAY(5),SATURDAY(6), SUNDAY(7);}
    

    (七)空行规则

    【推荐】方法体内的执行语句组、变量的定义语句组、不同的业务逻辑之间或者不同的语义之间插入一个空行。相同业务逻辑和语义之间不需要插入空行。

    说明:没有必要插入多行空格进行隔开。

    (八)注释规则

    1.【强制】使用//注释,在被注释的代码块或行上方。注释与被注释代码的第一行对齐。

    2.【推荐】代码修改的同时,注释也要进行相应的修改,尤其是参数、返回值、异常、核心逻辑等的修改。

    说明:代码与注释更新不同步,就像路网与导航软件更新不同步一样,如果导航软件严重滞后,就失去了导航的意义。

    3.【参考】注释掉的代码尽量要配合说明,而不是简单的注释掉。

    说明:代码被注释掉有两种可能性:
    1)后续会恢复此段代码逻辑。
    2)永久不用。
    前者如果没有备注信息,难以知晓注释动机。后者建议直接删掉(代码仓库保存了历史代码)。

    (九)操作符前后空格

    1.【强制】方法参数在定义和传入时,多个参数逗号后边必须加空格。

    正例:下例中实参的"a",后边必须要有一个空格。
    method("a", "b", "c");
    

    2.【强制】任何运算符左右必须加一个空格。

    说明:运算符包括赋值运算符=、逻辑运算符&&、加减乘除符号、三目运行符等。

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

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

    4.【强制】左括号和后一个字符之间不出现空格;同样,右括号和前一个字符之间也不出现空格。
    5.【强制】if/for/while/switch/do等保留字与左右括号之间都必须加空格。

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

    (十)其他规则

    1.【推荐】没有必要增加若干空格来使某一行的字符与上一行的相应字符对齐。

    正例:
    int a = 3;
    long b = 4L;
    float c = 5F;
    StringBuffer sb = new StringBuffer();
    说明:增加sb这个变量,如果需要对齐,则给a、b、c都要增加几个空格,在变量比较多的
    

    2.【推荐】当一个类有多个构造方法,或者多个同名方法,这些方法应该按顺序放置在一起,便于阅读。
    3.【强制】在一个switch块内,每个case要么通过break/return等来终止,要么注释说明程序将继续执行到哪一个case为止;在一个switch块内,都必须包含一个default语句并且放在最后,即使它什么代码也没有。
    4.【强制】在if/else/for/while/do语句中必须使用大括号,即使只有一行代码,避免使用下面的形式:if (condition) statements;
    5.【推荐】推荐尽量少用else, if-else的方式可以改写成:

    if(condition){
    	...
    	return obj;
    }
    //接着写else的业务逻辑代码;
    说明:如果非得使用if()...else if()...else...方式表达逻辑,【强制】请勿超过 3层,
    超过请使用状态设计模式。
    正例:逻辑上超过 3层的if-else代码可以使用卫语句,或者状态模式来实现。
    

    本文参考《阿里巴巴JAVA开发手册》

  • 相关阅读:
    按之字形打印二叉树 --剑指offer
    浅谈PHP+Access数据库的连接 注意要点
    Linux下统计代码行数
    获取服务器IP,客户端IP
    CURL访问举例
    廖雪峰博客
    Redis命令
    svn merge和branch 详解
    Linux Screen超简明教程
    MySQL 的Coalesce函数
  • 原文地址:https://www.cnblogs.com/GaogaoBlog/p/12309393.html
Copyright © 2011-2022 走看看