【仅供内部供应商使用,不提供对外解答和培训】

Page tree

【仅供内部供应商使用,不提供对外解答和培训】

Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 6 Next »

命名要能大致体现出方法的功能,不能使用一个简单的单词。

1.类命名:首字母大写,其他单词除首字母大写外都使用小写(除开一些特殊单词,如URL,HTML这种)

2.方法名:首字母小写,其他单词除首字母大写外都使用小写

3.变量名:首字母小写,其他单词除首字母大写外都使用小写 

public class DateWork { 
   private int remainDays = 10;//剩余的天数 
 
   public void calculateNameWithData(Data data) { 

   } 
}

两个对象做equals判断时,必须使用ComparatorUtils.equals(Object obj1, Object obj2)来进行判断,可以避免各种空指针错误。如果是明确的字符串比较,可以不使用工具方法。

不推荐
if (a.equals(b)) {
    // do something
}
正确
if (ComparatorUtils.equals(a, b)) {
    // do something
}

下面的写法同样正确,并且是推荐的写法,因为字符串"abcde"是确定不为null的:

同样正确
if ("abcde".equals(op)) {
   // do something
}

任意一个方法的长度不得超过50行。过长的方法不方便写单元测试后期的维护以及扩展,尽量做到一个方法只做一件单一的事情。

公共API方法的参数不要超过4个,过多的参数不利于方法的理解和使用。除了关于HTTP请求之类的本身就带了Response和Request两个参数的方法除外。

if,if-else,for,while,do和switch语句后面必须跟上“大括号{}”。主要是为了清晰的表名语句的作用范围和避免一些低级的错误。
不推荐
if (statement) return;
正确
if (statement) { 
   return; 
}
尽量使程序结构能更正确简洁的表达你的意图。如果能不用条件判断,则不要使用条件判断。
不推荐
if (booleanExpression) {
     return true; 
} else { 
    return false;
}
正确
return booleanExpression;

严格控制方法/变量的权限,只在当前类使用的方法/变量,必须使用private修饰符。

 

遵循零public方法原则,也就是尽量少的public方法。如果一个公共方法只有其子类调用,那么必须去掉这个公共方法。如果一个公共方法只有一个地方调用,考虑这个调用可否被其他方式替代。
类的变量列表按按如下顺序排列:

静态变量——实例变量 
public变量——protected变量——private变量

不推荐
public class Test   {
   protected String myProtectedData = "Protected";
   public static final String AAA = "aaa";
   private String myPrivate = "Private";
   public String myData = "data";
}
正确
public class Test   {
   public static final String AAA = "aaa";
   public String myData = "data";
   protected String myProtectedData = "Protected";
   private String myPrivate = "Private";
}

禁止在类中出现魔术数,应该使用常量(static final)来替代。这种方式通过合适的常量名可以让其他人能读懂该魔术数的意义。

不推荐
public double area(double r) {
    return 3.14 * r *r;
}
正确
private static final int PI = 3.14; 
public double area(double r) { 
    return PI * r * r; 
}

如果包含二元运算的表达式出现在三元运算符的“?”之前,应该用括号将他括起来。

不推荐
return a + b > 0 ? "student" : "teacher";
正确
return (a + b > 0) ? "student" : "teacher";

常量命名必须全部大写,单词之间用下划线分割。

同时需要注意的是:如果常量是写在接口中的,那么忽略掉所有的修饰符。

不推荐
public static final String WidgetName = "WidgetName";
正确
public static final String WIDGET_NAME = "WidgetName";

用于设置对象属性的方法前缀必须是set,用于获取一个布尔对象属性的方法前缀必须是is/has,而用于获取其他类型属性的方法前缀必须是get。

不推荐
public class Student {
    private boolean male;

    public boolean getMale() {
        return male;
    }
}
正确
public class Student {
    private boolean male;

    public boolean isMale() {
        return male;
    }
}

不要向构造函数和公共方法中传递null参数。null参数很难直接从方法声明上去理解该参数的意义。

 

假设有如下的工具方法:

Utils
public class Utils { 
   public static Border createBorder(Font font, Color color) {
         if (color == null) { 
             color = new Color(223, 122,123);
          } 
    } 
}
不推荐
Border border = Utils.createBorder(font, null);
正确
//先在Utils里面加这么个方法: 
public static Border createBorder(Font font) { 
    return createBorder(font, null);
} 
//再调用
Border border = Utils.createBorder(font);

在重写方法时,禁止出现下面的写法,即只简单的调用了一下super而没有额外的实现, 这里有一个例外,就是实现了FClone接口的类必须要实现clone方法,和该规则冲突,不用管。

不推荐
@override
public void doSomething() {
    super.doSomething(); 
}

代码中出现的中文(英文)等字符,必须做国际化。

错误
String shapeName = "圆形";
正确
String shapeName = Inter.getLocText("FR-Designer_Chart_Circle");

包名要具有描述意义,而且包中的类需要严格按照包描述的意义进行放置,另外,包名都必须是由小写字母组成。

比如com.fr.chart.axis包中的所有类都必须是和坐标轴相关的类。

数组的声明总是采用统一的方式。

不推荐
String strArray[];
正确
String[] strArray;

如果一个方法的返回值是数组,那么就必须返回一个数组,如果是空值就使用空数组的代替。

示例
public String[] getNames4JionTheParty() {
     if (a) {   
         return new String[] {"张三", "李四", "王麻子"};
     } else (b) {
         return new String[0]; 
     } 
}

在需要条件判断的地方,比如if语句里不要写过长的表达式(不超过两个逻辑表达式),此时应该用一个方法来替代表达式。

不推荐
if (a > -1 && a != 1 && dim.width > 0 && dim.height > 0) { 
    doSomething(); 
}
正确
if (shouldDoSomething(a, dim)) { 
    doSomething(); 
} 
boolean shuoldDoSomething(int a, Dimension dim) {
    return a > -1 && a != 1 && dim > width && dim.height > 0;
}

使用HashMap和HashSet以及HashTable等时要注意,如果使用的自定义的对象作为key,需要同时重写该对象的equals和hashCode方法。

变量的声明应当尽可能靠近其使用的位置。局部变量应该在方法顶部出现,而循环中的控值变量应该总是在循环语句中声明。

当switch的一个case语句没有break时,需要在case结尾处写上注释,防止是漏掉了break语句而不是原本就是想贯穿的。

示例代码
public String diffResult(int type) {
    String someDescription = "abc";
    switch (type) {
        // 这里需要贯穿
        case 1:
          someDescription = "def";
        case 2:
          someDescription = "xyz";
          break;
        default:
            someDescription = "mnx";
            break;
    }
    return someDescription;
}

异常信息的日志写法要符合规范。

错误的写法
try {
     doSomething();
} catch (Exception e) {
     e.printStackTrace();
}
正确的写法
try { 
    doSomething();
} catch (Exception e) {   
    FRContext.getLogger.error(e.getMessage, e);// 这里调用的方法视情况而定
}

 

如果需要忽略掉异常信息,请显示的将异常对象命名为 ignore

忽略异常
try { 
    doSomething();
} catch (Exception ignore) {   
    
}

在Java代码中需要输出JSON格式时,JSON字符串需要按照标准写。

错误
{a:"bb"};  
{'a':"bb"};
正确
{"aa":"bb"};

在写需要输出到客户端的JSON对象时,如果需要输出数组对象,不要使用普通的Java数组对象,要使用JSONArray对象。

JSONObject
JSONObject jo = JSONObject.create();
String[] names = new String[]{"aaa", "bbb", "ccc"}; 
jo.put("names", names);
JSON数组
JSONObject jo = JSONObject.create();
JSONArray ja = new JSONArray(); ja.put("aaa").put("bbb").put("ccc"); jo.put("names", ja);
  • No labels