学习前辈的编程规范,保持良好的编程习惯

非空判断
// bad
if(user.getUserName().equals("hollis")){
}
//good
if(user!=null&&"hollis".equals(user.getUserName())){
}

避免了两种会出现空指针异常的情况:user == null 时,get会异常。user != null但user.userName == null时equals会异常。
拓展,如何在项目中减少null的判断,需要保持一个好习惯:每个方法都不要返回null,尽量用空集合或者空值对象替代null。

用StringBuffer代替String
// bad
  String s = "";
  for (int i = 0; i < field.length; ++i) {
    s = s + field[i]}
 // good
 StringBuffer buf = new StringBuffer();
  for (int i = 0; i < field.length; ++i) {
    buf.append(field[i]);
  }
  String s = buf.toString();
尽量减少对变量的重复计算

明确一个概念,对方法的调用,即使方法中只有一句语句,也是有消耗的,

// bad
for (int i = 0; i < list.size(); i++){
  ...
}
// good
for (int i = 0, length = list.size(); i < length; i++){
  ...
}
// bad
doMethod(user.getDepartmentId);
doMethod2(user.getDepartmentId);
// good
String departmentId = user.getDepartmentId;
doMethod(departmentId);
doMethod2(departmentId);
尽量采用懒加载的策略

只在需要用到的时候才创建,除非其他地方也需要这个变量。
尽量不要创建不用的对象,也不要引用没有用到的,写完一个方法及时清理掉多引入的包。

// bad
String str = "aaa";
if (i == 1)
{
  list.add(str);
}
// good
if (i == 1)
{
  String str = "aaa";
  list.add(str);
}
try catch使用要谨慎

不要在循环中使用try…catch…,应该把其放在最外层。另外不要滥用,有些程序员对代码没有信心,每个方法进来就try一下,这个对程序没有好处。

手动分配长度

在创建ArrayList、LinkedLlist、StringBuilder、StringBuffer、HashMap、HashSet等对象时,尽量给出长度。

// bad
new ArrayList<>();
new StringBuilder();
// good
new ArrayList<>(10);
new StringBuilder(10);  
循环内需要的对象尽量在循环外定义
// bad
for (int i = 1; i <= count; i++)
{
  Object obj = new Object();    
}
// good
Object obj = null;
for (int i = 0; i <= count; i++)
{
  obj = new Object();
}
加锁粒度尽量小

比如synchronized加在方法上没有加在具体代码块上面好。
还有加锁在代码上不如给某个参数上锁。比如你有一个根据不同款式生成唯一订单号的逻辑,如果直接加synchronized,会导致这个代码一次只能处理一个请求,但是如果给每个款式配一把锁(可以借助redis实现),那么你的代码就可以同时处理很多订单请求了。

事务声明

声明事务时注解@Transactional放在类上不如放在方法上。放在controller上不如放在service方法上。
如果你的方法只有一次数据操作,那么就不要开启事务了。

常量名大写,单词之间使用下划线连接
普通变量使用驼峰命名
方法中形参过多可以用一个实体或者map进行封装
// bad
public void method(String userName,Integer userAge,String userSex,String userAddress){
}
// good
// 如果使用map最好写一个注释将所有参数列出来。
public void method(User user){
}
特殊数字或者字符用变量或者常量先定义
// bad 
// 这有个魔鬼数字 提成 = 价格 * 0.2
double percentage = price * 0.2;
// good
// 提成系数
double coefficient = 0.2;
double percentage = price * coefficient;
应该使用Collection.isEmpty()检测空
// bad
if (collection.size() == 0) 
// good
if (collection.isEmpty())
// best 
// 包含了 collection == null的判断
if (CollectionUtils.isEmpty(collection))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值