前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >代码检查--记录篇~

代码检查--记录篇~

作者头像
名字是乱打的
发布2021-12-23 17:51:40
6620
发布2021-12-23 17:51:40
举报
文章被收录于专栏:软件工程软件工程

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

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

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

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

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

代码语言:javascript
复制
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;
}

错误示例

代码语言:javascript
复制
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"字段

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

代码语言:javascript
复制
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

代码语言:javascript
复制
 result.stream().map(SecuritiesInfoSearchResp::getUniqueCode).collect(Collectors.toList());

或者我们可以:

代码语言:javascript
复制
  List<String> list = Arrays.asList(array);
        List arrList = new ArrayList(list);

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/11/27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.不要使用SimpleDataFormat,它是线程不安全的类,可能导致线程安全问题,慎用
  • 2.闲置不用的存储,包含无效变量,无效引用应该删除
  • 3.switch块不可缺少default语句,另外switch块中每个case都应通过break/return来终止
  • 4.不要调用Throwable.printStackTrace(...)
  • 5."Calendars" 和 "DateFormats" 不能是static类型,并发处理可能会出错
  • 6.创建线程或线程池时使用有意义的名称
  • 7.实例成员不应修改"static"字段
  • 8.数组转集合用流
相关产品与服务
腾讯云代码分析
腾讯云代码分析(内部代号CodeDog)是集众多代码分析工具的云原生、分布式、高性能的代码综合分析跟踪管理平台,其主要功能是持续跟踪分析代码,观测项目代码质量,支撑团队传承代码文化。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档