代码质量管理

代码质量管理

1 Make pushDataList a static final constant or non-public and provide accessors if needed.

在这里插入图片描述
类变量字段不应具有公共可访问性。所以把public访问修饰符,改成其他的修饰符,最好是private.

公共类变量字段不尊重封装原则,有三个主要缺点:
无法添加其他行为,如验证。
内部表示是公开的,以后不能更改。
成员值可能会在代码中的任何地方发生变化,并且可能不符合程序员的假设。
通过使用私有属性和访问器方法(set和get),可以防止未经授权的修改。

没有充分的理由在不声明字段“final”的情况下声明字段“public”和“static”。大多数情况下,这是一个在多个对象之间共享状态的错误。但是使用这种方法,任何对象都可以对共享状态执行它想要的任何操作,例如将其设置为空。

2 Use Galois/Counter Mode (GCM/NoPadding) instead

3 Remove this call to “equals”; comparisons between unrelated types always return false.

删除对"equals"的调用;不相关类型之间的比较总是返回false。

   if (transportTask.getTaskType().equals("1") || transportTask.getTaskType().equals("4")) {}
   
transportTask.getTaskType()为Short类型,所以if永远是false
short 数据类型是 16 位、有符号的以二进制补码表示的整数
最小值是 -32768(-2^15);
最大值是 32767(2^15 - 1);
Short 数据类型也可以像 byte 那样节省空间。一个short变量是int型变量所占空间的二分之一;
默认值是 0;

例子:short s = 1000,short r = -20000。
short在运算过程中会被提升到int类型或者更高类型进行运算。这是由于Java会自动将short数据在运算过程中当作一个int类型的字面值(literal)进行处理。byte类型做运算时同样如此,会被java自动进行提升等级。

short 是 Java 原始类型。short 变量可以存储16位带符号的整数。
Short 类是 short 原始类型的包装对象类。它定义代表此类型的值的范围的 MIN_VALUE 和 MAX_VALUE 常量。
Java 中的所有整数值都是 32 位的 int 值,除非值后面有 l 或 L(如 235L),这表示该值应解释为 long。

4 Cast one of the operands of this integer division to a “double”

        Cast one of the operands of this division operation to a "double"

将此除法操作的一个操作数转换为"double"

非常基础,编码过程中,容易被忽略的错误,两个整数相除,结果必定是整数,
如果用float、double等数据类型接收,语法上不构成错误,但是会丢失精度。

/**

  • @author css

  • @date 2019/9/30 9:39
    */
    public class Test {
    public static void test(double d){
    System.out.println(d);
    }

    public static void main(String[] args) {
    int a = 1;
    int b = 2;
    test(a/2);
    float c = a/b;
    System.out.println©;
    //此时c的值丢失精度
    }
    }

//Idea警告:浮点上下文中的整数除法
integer division in floating-point context

在这里插入图片描述

5 Sonar提示: Use “BigDecimal.valueOf” instead.

解决方法:使用BigDecimal.valueOf()代替。因为这个方法内部会将参数转换为String,保证精度不丢失。

    public static BigDecimal valueOf(double val) {
        return new BigDecimal(Double.toString(val));
    }

6 Either re-interrupt this method or rethrow the “InterruptedException”.

在这里插入图片描述
修改为:
在这里插入图片描述

7 Do something with the “boolean” value returned by “delete”.

在这里插入图片描述
在这里插入图片描述
提示当包含操作状态代码时,不应忽略返回值。也就是说不应该忽略文件删除操作的结果。
所以进行如下修改,但是如下修改虽然修复了漏洞,但是新增了异味。
在这里插入图片描述

异味提示"java.nio.Files#delete" should be preferred (squid:S4042)。应该使用Files.delete()方法,而不能之间文件delete.所以最后修改成:
在这里插入图片描述

8 Use a logger to log this exception.

在这里插入图片描述
修改为如下:
在这里插入图片描述

9 异常之IllegalAccessException

java.lang.IllegalAccessException: Class com.study.reflect.ref_test.Tool can not access a member of class com.study.reflect.ref_test.Student with modifiers “private”
IllegalAccessException 表示没有访问权限的异常。
Class com.study.reflect.ref_test.Tool can not access a member of class com.study.reflect.ref_test.Student with modifiers “private”
tool类无法访问student中的成员。
这次权限访问异常,是因为自己在用暴力反射获取字节码对象的时候没有去除权限,也就是setAccessible(true)

10 Use an “instanceof” comparison instead.

在这里插入图片描述
修改为:
在这里插入图片描述

11 Remove this throw statement from this finally block.

在这里插入图片描述
说明:在finally块中使用return、break、throw等可以抑制try或catch块中抛出的任何未处理的Throwable的传播,修改为:
在这里插入图片描述

12 Remove this return statement from this finally block

在这里插入图片描述
说明:因为finally里面写了return语句的时候,就会覆盖掉try代码块里面的return。因为finally是肯定会执行的。例子如下:
在这里插入图片描述
上述代码修改为:
在这里插入图片描述

13 A “NullPointerException” could be thrown; “pkList” is nullable here.

在这里插入图片描述
增加空值判断,如下所示:
在这里插入图片描述

14 Use try-with-resources or close this “ResultSet” in a “finally” clause.

在这里插入图片描述
修改为:
在这里插入图片描述
或者参考如下:
在这里插入图片描述
在这里插入图片描述
提示资源没有关闭,需要在finally中进行资源关闭,但是把资源关闭放到finally中由提示这样写不规范有异味。所以它推荐的写法是将创建资源流的代码放在try()中,这样系统会自动的关闭资源,不需要我们写.close()方法,如图
在这里插入图片描述

15 Use “Arrays.toString(array)” instead.

在这里插入图片描述
修改为:
在这里插入图片描述
参考如下
在这里插入图片描述

16 Save and re-use this “Random”.

在这里插入图片描述
说明:这种提示是随机数应该需要重用,然后他给出的参考是这样的
在这里插入图片描述

17 Either re-interrupt this method or rethrow the “InterruptedException”.

在这里插入图片描述
修改为
在这里插入图片描述

18 Synchronize on a new “Object” instead.

在这里插入图片描述
修改为
在这里插入图片描述

19 Replace the call to “Thread.sleep(…)” with a call to “wait(…)”

在这里插入图片描述
说明:如果在当前线程持有锁时调用Thread.sleep(…),则可能导致性能和可伸缩性问题,甚至更糟,因为持有锁的线程的执行被冻结。最好对monitor对象调用wait(…)来暂时释放锁并允许其他线程运行。修改为如下:

在这里插入图片描述

20 Use “BigDecimal.valueOf” instead

在这里插入图片描述
说明:由于浮点不精确,您不太可能从BigDecimal(double)构造函数中获得预期的值。修改为如下:
在这里插入图片描述

21 Call “Optional#isPresent()” before accessing the value.

在这里插入图片描述
说明:Optional value可以保存值,也可以不保存。可选方法中的值可以使用get()方法访问,但它会抛出一个
如果不存在值,则NoSuchElementException。为了避免异常,应该总是在调用get()之前调用isPresent()方法。
另外,请注意其他方法,如orElse(…)、orElseGet(…)或orElseThrow(…),可用于指定如何处理空的可选对象。

修改为如下:
在这里插入图片描述

22 Use try-with-resources or close this “PreparedStatement” in a “finally” clause.

在这里插入图片描述
修改为如下所示:使用try-with-resources语法
在这里插入图片描述
漏洞

23 Make this “public static producer” field final

在这里插入图片描述
修改为如下:
在这里插入图片描述

24 Lower the visibility of this setter or remove it altogether.

在这里插入图片描述
解决方法:去掉枚举中的set方法

25 Make this “public static redisTemplate” field final

在这里插入图片描述
修改为如下:
在这里插入图片描述

26 A “NullPointerException” could be thrown; “command” is nullable here.

在这里插入图片描述
空指针,解决方式:先判断或者先实例化,再访问里面的属性或者成员。

27 Cast one of the operands of this multiplication operation to a “long”

说明:int数运算最终再把结果转为long将有可能产生溢出
解决方案:转换为long型预算

举例:
long bigNum = Integer.MAX_VALUE + 2; // Noncompliant. Yields -2147483647

换为
long bigNum = Integer.MAX_VALUE + 2L;

28 Make this member “protected”.

在这里插入图片描述
在这里插入图片描述
解决办法

在这里插入图片描述

29 Not enough arguments

在这里插入图片描述
上面的这种bug在项目中很常见,参数都用new Object[]{}封装起来。特别是从class文件反编译回来成的java文件格式也是这样的。但是如果要消除bug的话直接使用参数就好了,不要用new Object[]{}封装。
在这里插入图片描述

30 This branch can not be reached because the condition duplicates a previous condition in the same sequence of “if/else if” statements

if分支中不能出现两个分支一样的情况。
在这里插入图片描述
把重复的删除掉就可以了。

31 Make this “public static st_soTimeout” field final

在这里插入图片描述
没有充分的理由在不声明字段“final”的情况下声明字段“public”和“static”。大多数情况下,这是一个在多个对象之间共享状态的错误。但是使用这种方法,任何对象都可以对共享状态执行它想要的任何操作,例如将其设置为空。
解决

32 Make st_sendPort a static final constant or non-public and provide accessors if needed.

33 ‘PassWord’ detected in this expression, review this potentially hard-coded credential.

  • 4
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Java代码质量管理制度是针对Java程序开发和维护过程中的代码质量进行管理和控制的一套制度。一个好的Java代码质量管理制度可以帮助团队规范开发流程,提高代码的可维护性和可重用性,减少错误和缺陷,提高软件的稳定性和性能,以此来提高整个团队的工作效率和产品质量。 Java代码质量管理制度的实施需要从以下几个方面考虑: 1. 编码规范要求:团队可以根据项目的需求和编码规范要求制定相应的Java编码规范集,制定合适的文件、命名约定,前置条件、后置条件等。 2. 代码评审制度:团队中的开发人员需要对代码进行评审,来确保代码质量符合要求。评审包括有代码格式、规范性、异常处理、性能优化等方面的评审。 3. 性能测试:性能测试是Java代码质量管理制度的重要组成部分。性能测试可以在代码开发周期中逐步进行,以确保项目期间的性能要求得到满足。 4. 测试环节设定:团队要制定测试计划,对代码进行全面的验证,确保代码和项目能够情况的符合测试要求,以便进行相应的调整和完善。 5. 安全问题:团队制定安全管理方案,针对不同的安全风险进行相应防控措施采用。 总之,Java代码质量管理制度的制定要根据项目的实际情况,各个方面都要有所体现,确保程序的可维护性、可扩展性、可读性和性能等方面都能够得到充分保障,以便保障项目的正常运行和业务需求的保障。 ### 回答2: Java代码质量管理制度是指遵循编程规范、模块化设计和测试方法,确保Java程序具有高质量和易于维护性的一系列措施。这个制度旨在提高软件开发的效率和稳定性,减少开发过程中出现的错误和缺陷,通过代码审查和质量管理工具,确保Java代码符合最佳实践和行业标准。 Java代码质量管理制度包括以下几个步骤: 1.订立代码规范:制定一套Java编程规范,如命名规范、缩进、注释等内容,以确保代码风格统一并且易于理解和修改。 2.模块化设计:将Java程序分解成多个模块,并且每个模块都有明确的职责和接口。这样能够减少代码之间的耦合,使程序更易于扩展和修改。 3.使用测试工具:使用JUnit和其他测试工具来确保Java代码的正确性和可靠性。测试用例要覆盖程序的各种情况,确保能够快速发现和修复问题。 4.代码审查:通过严格的代码审查机制,确保Java代码质量得到有效的监控和改进。对于潜在的问题和可能的改进点进行讨论,并记录在开发规划中。 总之,Java代码质量管理制度是保证软件质量的必要举措之一。它可以让开发人员始终保持在高效和高质中,从而保障Java应用程序质量和稳定性的水平。 ### 回答3: Java代码质量管理制度是一个组织内部建立、执行和维护的一系列流程、标准和工具,旨在提高Java代码质量和开发效率。这些流程、标准和工具可以涉及代码编写、代码审查、代码测试、代码修复等各个方面。具体来说,Java代码质量管理制度包括以下几个方面: 第一,代码编写规范。制定一套Java代码编写规范,让所有开发者在编写Java代码时都能够遵循这个规范,以保证代码的统一性和可维护性。 第二,代码审查流程。在代码编写完成后,需要进行代码审查,以保证代码质量。建立一套代码审查流程,明确谁来审查、如何审查、审查的标准是什么等,以确保每个代码提交都经过了严格的审核。 第三,测试环节。测试是Java代码质量管理不可或缺的一部分。管理者需要确保测试环节充分、全面,覆盖功能测试、性能测试、安全测试等各个方面。 第四,代码修复和重构。一旦发现问题,就要及时修复,尽可能不影响后续的开发进程。同时,对于一些存在问题的代码,也需要进行重构和优化,以提高代码的可维护性和性能。 第五,使用工具。Java代码质量管理中,使用一些工具可以提高代码质量和开发效率。例如,使用代码静态分析工具可以在编码阶段发现潜在问题,使用版本控制工具可以管理代码的版本和修复历史等信息。 综上所述,Java代码质量管理制度可以提高代码质量和开发效率,帮助组织更好地管理Java代码开发过程。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值