DEBUG常识选项:(debug模式下,直到空白页出现,alt+“←”,返回到问题出的地方,如果是方法点进去,继续)
正常调试我不想多说,往往我们思维存在一定定式,调试一定要是画面→数据库→到画面。但有时我们发现,不清楚业务,发现条件怎么都无法进入另一个判断或循环。此时,我们换个思维,直接去改debug栏下变量让强制进去(当然返回结果是不对的),这样我们就可以看到sql句,这样拿着结果去分析参数等,即可。
举例上面两种情况:
1,我们常见的固有思维,不需要举例就明白。
2,debug下,修改变量值和对象值得方法。(优点:我们不需要去数据库改数据来完成要求,只需要debug栏修改即可)
前提准备(下面的测试类只是为了说明问题,不具有实际作用)
public class DebugTest {
public static void main(String[] args) {
EmployeeEntity employeeEntity = new EmployeeEntity();
//employeeEntity = null;
List<EmployeeEntity> lists = new ArrayList<EmployeeEntity>();
// lists.add(employeeEntity);
DepotEntity depotEntity = new DepotEntity();
depotEntity.setDepotEntities(lists);
if (depotEntity.getDepotEntities().size() != 0) {
System.out.println("yo did it");
}
}
}
debug下我们发现,lists是空,不满足条件(因为我们去掉了set),但是有时为了测试方便,这里我们介绍一种不改前台输入,直接后台设置的方式。
注意事项:1,要用完整的包名,用List有完整包名,ArrayList没有,这是因为List接口有很多包,但ArrayList是唯一的包。因此我们写这个时候。2,选择的是对像名,而不是下面的elementData。
常见BUG,
1,空指针:debug模式下,定位 -> 查找具体的空值原因(一定定位定到某个值)
修改方式:例如:
1.1,long a = b.getD() == null? 0: b.getD();
1.2,在前台传入时,增加check
1.3,还不是,后台增加逻辑块去处理,或者sql做check
注意,String是可以可以转null,需要留意。
2,error为“ ”(中间为空格或者tab时),处理用trim()函数,去掉多余的空格等,去两头留中间。
例如:找到d ==“ ”,a = b.getD() 需要加判断
a!=null&&!"".equals( b.getD().trim())或者b!=null&&b.getD().trim().isEmpty();
“”.equals( )这种方式可以避免空指针。
3.无字段,依然要去获取或一个对象中不存在一个对象(注意:如果判断对象.size()等,在循环中有获取不存在对象,对象为空,不执行bug处,就与bug无关)
前者:对应方式,增加字段。后者同理。
3.数组越界。index.解决方式:增加>if判断不越界
4.null的转换问题,null可以强转为任何类型,但是返回的结果依然是null
5.get/set的问题,前提保证对象必须保证不为null的(特别说明,无论数据库返回对象,还是自己前台传来的对象,都必须保证)
6.项目出现感叹号时,无疑是jar导入问题;或者出现实体引用问题,也有可能是jar包问题(也有可能是未导包)
9.有时候发现sql查出的结果明明是没有任何信息, 但是 list却不为null。原因:①因为各个关键子段为null也算是个结果集,要排除要加上isEmpty;②其次null的时候还没有分配内存,空的时候是已经分配了内存只是还没有写入值(java虽然没有指针,但是其实只有的)。但是最根本的mybatis中已经封装好的,这个只能去看mybatis的源文件。
10.我们来说说try catch扑捉异打印。通常BUG我们是通过e.printstack()或者throw抛出,打印到控制台,根据此去修改bug。但是一旦涉及框架抛出的异常的错误,我们就需要屏蔽不是框架的异常,也就简单将e.printstack()或者throw注释掉。
11,说明:资源路径位置类型 超级类"javax.servlet.http.HttpServlet"在Java建造路径中
12,org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class: file [E:\ownStudy.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\StudySpringMVC\WEB-INF\classes\com\ssm\dao\CustomerMapper.class]; nested exception is java.lang.IllegalArgumentException
一看就是jar冲突:spring官网说了,要使用java8,只支持spring 4.X以上版本,而spring的使用最低java要求java5及以上;
两种方案:1,升级jar包;2,降低Apache版本运行
SpringBoot报错看法:
Description:是出错的描述。Action:是问题的解决方式。
13.这种说不能参数化问题。很可能是导包出错,或者class名和下面下同导致不能参数化。
14,Uparseable(不可解析) date (日期);