编程规约
方法参数类型必须一致,不要出现自动装箱拆箱操作
2.1.1.1 反例
这种操作很容易产生难以排查的NPE异常
/**
* 反例
* 容易出现空指针异常,如果参数为null就会拆箱失败空指针错误
* 排查的时候很难排查,因为直接看代码看起来不会出现空指针的。
* @param value
* @return
*/
public static int handel(Integer value) {
return value;
}
2.1.1.2 正例
入参以及出参,和参数传递类型是一致的
public static Integer handel(Integer value) {
return value;
}
2.1.2 SimpleDateFormat是线程不安全的
SimpleDateFormat 是线程不安全的类,一般不要定义为 static 变量,如果定义为 static, 必须加锁,或者使用 DateUtils 工具类
2.1.2.1 反例
使用这种方式在多线程的情况下会报错,或者出现数据不一致的情况
private static final SimpleDateFormat dateFormate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
2.1.2.2 正例
使用ThreadLocal的方式保证线程安全,或者使用
DateTimeFormatter
代替SimpleDateFormat
private static final ThreadLocal<SimpleDateFormat> threadLocal = new ThreadLocal<SimpleDateFormat>() {
@Override
protected SimpleDateFormat initialValue() {
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
}
};
2.1.3 使用equals方法应该注意空指针
2.1.3.1 反例
如果object为null就会抛出NPE异常
object.equals("test");
2.1.3.2 正例
应该使用常量或者确定的值来进行判断equals
"test".equals(object);
或者使用
Objects.equals
Objects.equals(object1,object2)
2.2 异常日志
2.2.1 事务场景中如果异常被被捕获要注意回滚
2.2.1.1 反例
@Service
@Transactional(rollbackFor = Exception.class)
public class UserServiceImpl implements UserService {
@Override
public void save(User user) {
try{
//some code
//db operation
}catche(Exception e){
}
}
}
2.2.1.2 正例
@Service
@Transactional(rollbackFor = Exception.class)
public class UserServiceImpl implements UserService {
@Override
public void save(User user) {
try{
//some code
//db operation
}catche(Exception e){
//捕获处理后需要再将异常抛出
throw e;
}
}
}
2.2.2 不要在 finally 块中使用 return
try 块中的 return 语句执行成功后,并不马上返回,而是继续执行 finally 块中的语句,如果此处存 在 return 语句,则在此直接返回,无情丢弃掉 try 块中的返回点。
2.2.2.1 反例
这种情况下结果永远返回的都是true,fanally中不要做返回操作
public static boolean getValue(String text) {
try {
return text.equals("123");
} finally {
return true;
}
}
2.2.2.2 正例
public static boolean getValue(String text) {
return "123".equals(text);
}
2.2.3 应用中不可直接使用日志系统(Log4j、Logback)中的 API
在Java生态体系中,围绕着日志,有很多成熟的解决方案,关于日志输出,主要有两类工具。
一类是日志框架,主要用来进行日志的输出的,比如输出到哪个文件,日志格式如何等,另外一类是日志门面,主要一套通用的API,用来屏蔽各个日志框架之间的差异的。
所以,对于Java工程师来说,关于日志工具的使用,最佳实践就是在应用中使用如Log4j + SLF4J 这样的组合来进行日志输出。
这样做的最大好处,就是业务层的开发不需要关心底层日志框架的实现及细节,在编码的时候也不需要考虑日后更换框架所带来的成本,这也是门面模式所带来的好处。
请不要在你的Java代码中出现任何Log4j等日志框架的API的使用,而是应该直接使用SLF4J这种日志门面。
2.2.4 所有日志文件至少保存15天
所有日志文件至少保存15天,因为有些异常具备以“周”为频次发生的特点,网络运行状态、安全相关信息、系统监测、管理后台操作、用户敏感操作需要留存相关的网络日志不少于6个月。
标签:return,规约,狂野,编程,public,static,2.2,日志,2.1 From: https://www.cnblogs.com/xieshier/p/16990452.html