美文网首页
代码检查--记录篇~

代码检查--记录篇~

作者: 名字是乱打的 | 来源:发表于2020-08-23 22:04 被阅读0次

根据项目整体代码检查结果,记录一下,有了这玩意,代码规范问题多犯犯错误,以后就没毛病了啊~

1.不要使用SimpleDataFormat,它是线程不安全的类,可能导致线程安全问题,慎用

--可以使用DateTimeFormatter代替SimpleDateFormat 原文地址,可以点这里

2.闲置不用的存储,包含无效变量,无效引用应该删除

闲置存储是给本地变量赋值,这个值可能是null或者在后续处理中不被使用的。计算或者返回一个只用于重写的或者抛弃的的变量,可能引起中的错误。即使不发生错误,也是非常浪费系统资源的。
正确示例

public void pow(int a, int b) {
  if(b == 0) {
    return 0;
  }
  int x = a;
  for(int i= 1, i < b, i++) {
    x = x * a;
  }
  return x;
}

错误示例

public void pow(int a, int b) {
  if(b == 0) {
    return 0;
  }
  int x = a;
  for(int i= 1, i < b, i++) {
    x = x * a;  //Dead store because the last return statement should return x instead of returning a
  }
  return a;
}
3.switch块不可缺少default语句,另外switch块中每个case都应通过break/return来终止
4.不要调用Throwable.printStackTrace(...)

Throwable.printStackTrace(...) 会打印输出Throwable及其堆栈跟踪流。 应该使用日志来替代打印Throwable信息: 用户可以很方便查看日志。 日志信息都是统一格式的,用户可以轻松查看。(比如lombok封装好的@Slf4j)

5."Calendars" 和 "DateFormats" 不能是static类型,并发处理可能会出错

并非所有在标准Java库的类都可以写进安全线程里。以多线程方式使用它们极有可能导致在运行时产生数据问题或异常。static类型意味着该变量属于当前类,很容易在使用时改变当前类对象,从而引起潜在的线程安全问题。 可以把成员声明为final,使其不可被改写。或不声明为static减少线程安全问题发生的几率。 只要下面实例中任何一个标记为static:Calendar、DateFormat、javax.xml.xpath.XPath、javax.xml.validation.SchemaFactory,这条规则就会报错。

6.创建线程或线程池时使用有意义的名称

有意义的线程名称有助于跟踪错误信息,因此在创建线程或线程池时指定名称,看到这个想起之前有小伙伴提醒过我,自定义注入的类名,但是我没听....后面要注意了

7.实例成员不应修改"static"字段

通过非静态的方法更新静态字段很难得到正确的结果在多个实例和/或多线程的情况下,很容易导致缺陷。
错误示例

public class MyClass {

  private static int count = 0;

  public void doSomething() {
    //...
    count++;  // Noncompliant
  }
}
8.数组转集合用流

UnsupportedOperationException这个还真亲身经历过这个错误,Arrays中的asList(arr) 可将数组转集合,但是进行删除和添加会发生UnsupportedOperationException。
具体原因是 : 由于Arrays.asList() 返回的是Arrays的内部类ArrayList, 而不是java.util.ArrayList。Arrays的内部类ArrayList和java.util.ArrayList都是继承AbstractList,remove、add等方法AbstractList中这些方法调用后是默认throw UnsupportedOperationException而且不作任何操作。java.util.ArrayList重新了这些方法而Arrays的内部类ArrayList没有重新,所以会抛出异常。源码分析可以看:https://blog.csdn.net/qq_39416311/article/details/83688591

**推荐: **对于数组转list我们可以采用更安全方式,比如下面 一个名为result的List

 result.stream().map(SecuritiesInfoSearchResp::getUniqueCode).collect(Collectors.toList());

或者我们可以:

  List<String> list = Arrays.asList(array);
        List arrList = new ArrayList(list);

steam():把一个源数据(集合,数组,I/O channel, 产生器generator 等)转化成流。
https://www.runoob.com/java/java8-streams.html

相关文章

  • 代码检查--记录篇~

    根据项目整体代码检查结果,记录一下,有了这玩意,代码规范问题多犯犯错误,以后就没毛病了啊~ 1.不要使用Simpl...

  • Flutter工程解析篇 + 工程代码部分解析记录

    Flutter工程解析篇 + 工程代码部分解析记录 Flutter工程解析篇 + 工程代码部分解析记录

  • 检查代码

    阅读《软件测试》书籍随手记录的笔记 静态白盒测试:检查设计和代码静态白盒测试是在不执行软件的条件下有条理地仔细审查...

  • 「代码记录」WGCNA篇

    Nov 21, 2019更新 => 修正部分function代码,实现了导出gene2module 目的 最...

  • 『代码记录』circlize篇

    之前用TBtools做了一次圈图,颜值确实不低,circos早就折腾过,奈何没学过perl,用起来特别不顺手,顺便...

  • Flink之Iterate

    今天超过三篇记录了 代码: 输出:

  • npm script工作流(二)串行和并行

    代码检查 eslint 【js 代码检查】 stylelint 【样式文件检查】 jsonlint 【json ...

  • 3.8 检查代码

    3.8 检查代码 问题一:代码检查具体是做什么? 检查代码主要检查以下几项: 代码风格:让项目成员强制遵守统一的代...

  • vscode前端必装插件

    Gitlens用来显示每行代码的提交记录 ESLint检查Javascript编程时的语法错误。 Debugger...

  • Java报错记录:UT000128: Remote peer c

    报错记录 java跨服务报错,检查了FeignClient注解和yml配置以及代码都没有问题。检查了一天半 网上资...

网友评论

      本文标题:代码检查--记录篇~

      本文链接:https://www.haomeiwen.com/subject/lwywjktx.html