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等进行通信