Bug合集

1.数据库里能查到数据可是写测试方法测试为空:

  • 原因:开发阶段将数据库更改为自己的数据库,自己的数据库中没有数据,所以方法调用 Postman返回数据为空,而navicat连接为公司的数据库,数据库中有数据

2. == 与.equals()的选择

==用来比较常量,我遇到的情况用int

//int 类型
if(1==open.getWarnLevel()){
	.....
}

.equals() 一般用来比较字符串 String

if("".equals(open.getWarnLevel)){
	.......
}

3.代码格式问题:应该注意书写规范,代码不要杂乱,要有数据

4. 微服务之间调用方法时传输Map<String,<String,Double>> 类型 json解析异常

解决方式:https://blog.csdn.net/shuaishuai1234/article/details/84570435
原因主要是:map循环引用 数据重复而导致出现$ref 从而导致json解析异常

5.

sql的书写
详见点击我

/*
     * 根据设备id分组找出最新数据
     */
    @Query(value = "select * from damintedispmicroservice_realtimedata"
            + " where id in(select max(id) from damintedispmicroservice_realtimedata group by deviceid)", nativeQuery = true)
    List<RealTimeData> findRecentlyData();

6.应该注意避免空指针异常

避免空指针的几个写法

equals

Object的equals方法是方法是对称的,调用a.equals(b)和调用b.equals(a)是完全相同的,这也是为什么程序员对于对象a和b这么不上心。但是要注意a == null时会抛出空指针异常。

例如:

Object unknownObject = null;
if(unknownObject.equals(“knownObject”)){

}
所以我宁愿把确定不为null的对象放在前面。

valueOf()和toString()

因为调用null对象的toString()会抛出空指针异常,如果我们能够使用valueOf()获得相同的值,那宁愿使用valueOf(),传递一个null给valueOf()将会返回“null”,尤其是在那些包装类,像Integer、Float、Double和BigDecimal。

例如:

BigDecimal bd;
System.out.println(String.valueOf(bd)); //不会抛出空指针异常
System.out.println(bd.toString()); //抛出 "Exception in thread “main”
避免从方法中返回空指针,而是返回空collection或者空数组。
尽可能返回一个空集合和空数组而不是返回null。

从已知的String对象中调用equals()和equalsIgnoreCase()方法,而非未知对象。

总是从已知的非空String对象中调用equals()方法。因为equals()方法是对称的,调用a.equals(b)和调用b.equals(a)是完全相同的,这也是为什么程序员对于对象a和b这么不上心。如果调用者是空指针,这种调用可能导致一个空指针异常

Object unknownObject = null;

//错误方式 – 可能导致 NullPointerException
if(unknownObject.equals("knownObject")){
  System.err.println("This may result in NullPointerException if unknownObject is null");
}

//正确方式 - 即便 unknownObject是null也能避免NullPointerException
if("knownObject".equals(unknownObject)){
  System.err.println("better coding avoided NullPointerException");
}


使用null安全的方法和库 有很多开源库已经为您做了繁重的空指针检查工作

其中最常用的一个的是Apache commons 中的StringUtils。你可以使用StringUtils.isBlank(),isNumeric(),isWhiteSpace()以及其他的工具方法而不用担心空指针异常。

//StringUtils方法是空指针安全的,他们不会抛出空指针异常
System.out.println(StringUtils.isEmpty(null));
System.out.println(StringUtils.isBlank(null));
System.out.println(StringUtils.isNumeric(null));
System.out.println(StringUtils.isAllUpperCase(null));

Output:
true
true
false
false


这个Java最佳实践或技巧由Joshua Bloch在他的书Effective Java中提到。这是另外一个可以更好的使用Java编程的技巧。通过返回一个空collection或者空数组,你可以确保在调用如size(),length()的时候不会因为空指针异常崩溃。Collections类提供了方便的空List,Set和Map: Collections.EMPTY_LIST,Collections.EMPTY_SET,Collections.EMPTY_MAP。这里是实例。

避免你的代码中不必要的自动包装和自动解包。

且不管其他如创建临时对象的缺点,如果wrapper类对象是null,自动包装同样容易导致空指针异常。例如如果person对象没有电话号码的话会返回null,如下代码会因为空指针异常崩溃。

Person ram = new Person("ram");
int phone = ram.getPhone();

当使用自动包装和自动解包的时候,不仅仅是等号,< > 同样会抛出空指针异常。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值