空指针处理方案

空指针的bug处理

  • 出现A.xxxx的时候要考虑A如果为null的空指针异常

//误报,此时first报空指针风险,但是不可能
for (int i = 0; i < size; i++) {
TreeNode first = queue.pollFirst();
if (first.left != null) {
    queue.offerLast(first.left);
}

 

//处理前:response为空也不影响后面一句执行就会报空指针
if (response == null || response.getCode() == null || response.getCode() != 0) {
		logger.error("meituan query hotel detail plan fail{}", (response != null ? JSON.toJson(response) : "null"));
}
    result = response.getResult();


//处理后:
if (response == null) {
    System.out.println("meituan query hotel detail plan fail{}");
} else {
    String result = response.toString();
}

 

//字符串与文字的比较
String str = null;
if(str.equals(“Test”)){
     / *这里的代码将不会被触发,因为会抛出异常。* /
}

String str = null;
if(“Test”.equals(str)){
     / *正确的用例。不会抛出异常。* /
}

//if判断的布尔值比较
Boolean.TRUE.equals(xxx)

 

//检查方法的参数 
//执行方法的主体前,一定要检查它的参数为空值。只有在正确检查了参数后,才继续执行该方法。否则,可以抛出一个IllegalArgumentException并通知调用方法传递的参数有问题。
public static int getLength(String s){
   if(s == null)
        抛出新的IllegalArgumentException(“参数不能为空”);
   return s.length();
}

 

//优先使用String.valueOf()方法代替toString() 
//当程序代码需要对象的字符串表示形式时,避免使用该对象的toString方法。如果你的对象的引用等于null,则会抛出NullPointerException
//相反,考虑使用静态String.valueOf方法,该方法不会抛出任何异常并打印”null”,以防函数的参数等于null。
public static int getLength(String s){
   if(s == null) s.toString(); 🙅
   String.valueOf(s) ✌️
}

 

//使用三元运算符,可以避免NullPointerException
//布尔表达式?value1:value2;首先,评估布尔表达式。如果表达式为true,则返回value1,否则返回value2。
String message =(str == null)?""str.substring(010);
//如果str引用为空,则消息变量将为空。否则,如果str指向实际数据,则消息将检索它的前10个字符。

 

//创建返回空集合而不是null的方法,创建返回一个空集合的方法,而不是一个null值。代码可以遍历空集合并使用它的方法和字段,而不会抛出一个NullPointerException
public class Example {
   private static List<Integer> numbers = null;

   public static List<Integer> getList() {
        if (numbers == null)
             return Collections.emptyList();
        else
             return numbers;
   }
  //此时用numbers.xxxxx就不会报空指针异常
}

 

//org.springframework.util 工具包和
//使用Apache的StringUtils,CollectionUtils类,Apache的Commons Lang是一个为java.langAPI 提供帮助工具的库,比如字符串操作方法。提供字符串操作的示例类是StringUtils.java,例如:StringUtils.isEmpty(),CollectionUtils.isEmpty(),避免NullPointerException。
if(StringUtils.isBlank(str)){ 
     System.out.println(str.toString()); 
}

 

assert(s!= null); 使用断言
//编写测试用例覆盖测试

 

posted @   complexlong  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示