首页 > 代码库 > Java编码规范

Java编码规范

 

命名规范

包名:小写,命名有意义

类名,接口:首字母大写(caml风格)

方法:首字母小写,后面的各单词首字母大写。使用有意义的单词或单词简写

属性、变量:同方法名

常量:全部大写,使用_分割

形参:要与变量名一致

数组:方括号放在变量类型后面

文档注释:

文件注释:

/********************************************************************

* 文件名:Test.java

* 版权:Copyright (C) 2016 XXX. All Rights Reserved.

* 修改人:XXX

* 修改时间:2016-8-22

* 修改内容:添加toString方法

*******************************************************************/

 

类注释:

/**

* 该类是对日志的处理类(功能职责)

* @author

* @since JDK1.8

* @history 2016-8-16 XX 新建

*/

 

方法注释;

/**

* 功能说明

* @param context 应用上下文

* @param bean

* @return DataBean

* @throws Exception 如果在转换过程中出错,则抛出Exception

*/

 

属性注释:

/** 说明字段的含义 */

 

特殊注释:

//TODO

没有完成但必须完成的地方

//FIXME

用于必须修改bug的地方

 

如果一个方法是对接口的实现,那么详细的方法文档注释应该写在接口类的方法中,实现类方法应该通过 @see 指引过去。

 

代码优化:

1.避免“上帝类”

2.尽量将一些逻辑实现,尤其是可复用的逻辑实现,分离到不同的方法中

3.严格的依照JavaBean的统一方式来写属性访问getter、setter方法,否则在java的反射机制实现时,会有问题

4.方法调用的速度比较,从快到慢排列: static < final < instance method < interface method < synchronized。

5.finalize方法尽可能避免使用

6.尽可能的使用静态变量。如果类中的变量不会随他的实例而变化,就可以定义为静态变量,从而使他所有的实例都共享这个变量

7.不要在代码中进行具体数值硬编码,把它定义为静态常量,然后在代码中引用

8.尽量使用接口申明属性和变量:

如:List<String> list=new ArrayList<~>();

Map map = new HashMap();

9.在方法中使用局部变量,一定要确定变量赋值的唯一性。否则,代码将难以维护,形成歧义,而且是隐含bug的温床。

 

代码风格:

每行申明一个变量

int a;

int b;

每一行至多包含一个Statement

argv++; // Correct

argc++; // Correct

argv++; argc--; // AVOID!

 

关于字符串的处理的方式:

1.避免在字符串中使用“+”,尽量使用StringBuffer 进行连接;

2.在使用equals和equalsIgnoreCase方法判断两个字符串类型操作数是否相等时,如果两个操作数之中有一个为字符串常量,应该将它置于点操作符“.”的左边,将变量放在点操作符的右边。这样做的好处在于,程序员在使用equals和equalsIgnoreCase方法时,可以不必先判断变量操作数是否为null

Switch:

在任何的情况下,必须在最后写default语句。

关于异常:

1.避免对应用程序的逻辑使用try/catch ,如果可以用if、while等逻辑语句来处理,那么就尽可能的不用try/catch语句

2.重用异常,在必须要进行异常的处理时,要尽可能的重用已经存在的异常对象。以为在异常的处理中,生成一个异常对象要消耗掉大部分的时间

关于日志信息的调试:

不要直接的使用System.out或者System.err或者Exception的printStackTrace()方法打印出调试信息或Exception

资源释放:

手动使用的资源要及时释放,比如文件资源、数据库资源等。(虽然这个类可能实现了atupCloseable接口)

 

针对java.util包的使用注意事项:

避免使用java.util包里面的java.util.Vector和java.util.Hashtable,因为这两个类是synchronized的,比不是synchronized的容器类速度会慢很多,当在单线程的情况下请使用java.util.ArrayList(接口是:java.util.List)和java.util.HashMap(接口是java.util.Map)。

 

工具类的命名:

工具描述 + Util

模块专用常量的统一管理命名

模块名 + Constants

 

各层代码分工:

页面:

展示数据

? 进行页面数据验证

? 不处理与应用程序相关的业务逻辑

? 不进行事务管理

? 复杂的逻辑,请交给工具类来处理

 

web层:

? 管理用户界面层发出的请求,做出相应的响应

? 从页面取得相应的用户输入数据

? 将数据提供给业务层,委派调用业务逻辑和其它上层处理

? 统一处理异常,包括持久层和业务层抛出的异常

? 为页面显示提供数据模型

? 用户身份和操作权限验证

? 不进行事务管理

biz业务层:

? 处理应用程序的业务逻辑和业务校验

统一管理事务

不直接与数据库通信

? 不直接与JSP、Session等进行通信

Java编码规范