最近在写项目的过程中,总是遇到各种异常bug!搞得每次调bug都花费很多时间,所以今天特地花点时间总结一下一些常见的异常,供大家参考!有什么地方说的不是很对的,需要修改的可以私信我或者评论!
首先我们针对异常,应该追根溯源到源代码,这样我们理解的才更深刻点!所有的异常都是继承Java.lang.Throwable类;
而Throwable类有两个直接子类就是error和exception;下面我们就来介绍error和exception
一:error:error从字面上理解就是错误的意思,他指的是jvm(java虚拟机)级别的错误,我们程序员无法处理!
二:exception:exception又分受检异常和非受检异常!那么问题又来了,那什么是受检异常和非受检异常呢!
受检异常指的是由一些外部因素引起的异常,程序必须处理这些异常;
而非受检异常指的是由于程序员逻辑出现问题造成的异常,
java编译器不强制要求处理(指的是编译期可以处理可以不处理,但是运行期肯定需要处理的)!
接下来我们看看受检异常和非受检异常都有哪些最常见的异常类:
受检异常:1.FileNotFoundException:指的是文件找不到异常,出现这类问题首先看看你的文件名陈写正确没有
或者是你的路径有问题!
导致他找不到
2:IOException:指的是IO流异常,这类问题一般就是在文件图片上传下载的时候,代码某些地方逻辑有问题
或者粗心大意写错代码导致的,报的异常也会明确指示哪里出错,仔细找找!
3:SQLException:指的是sql语句异常,这类问题不用看,仔细检查自己的代码的sql语句,看看是数据库名字写错
或者是列名写错,亦或者是你的占位符的顺序写错了,及你的列明是否与数据库表名是否一致(其实解决这类问题的最好
办法就是先将sql语句在数据库写好然后在复制过来,保证不会错)。
4.InterruptedException:指的是中断异常,这类问题一般是在java线程中遇到的,当线程调用wait()、sleep()
、join()等方法的时候,就会抛出InterruptedException异常(例如:子线程调用sleep方法等待5秒,而单元测试主线程
没有设置sleep方法,就会快速执行完毕,强行打断子线程的执行,就会报错误,解决方法就是主线程也设置sleep方法时长
长于5秒就可以了)。
非受检异常:
1.NullPointerException:空指针异常,这是大家再熟悉不过的异常了,这类问题就是你设置的参数的值没有
传进来,java会明确提示错误在哪一行,自己debug调试一下就知道了!
2.ClassCastException:说得通俗点就是类型转换异常(不兼容),这类问题常出现于继承中,比如:子类
和父类的转换过程(也可以说是向下转型,打个比方狗是动物,但是动物不一定是狗有可能是其他任意一种动物)。
3.ArrayIndexsOutOfBoundsException:顾名思义就是数组下标越界错误,这类问题常出现在数组扩容上
(解决数组扩容数组下标越界:你可以把数组空间设置大点,不让他频繁扩容;亦或者吧java虚拟机的堆栈
空间设置大点)或者是遍历数组的时候不要写小于某个值,要写小于数组.length的长度所以大家要注意了!
4.ArithmeticException:算法异常,这类错误就是常识问题了最简单就是例如:3/0=多少,零不能做除数!
5.IllegalArgumentException:非法参数异常,这类问题就是参数的类型错误,java会明确告诉你哪里错了的
(我遇到一个错误是在做登录注册的时候,利用Cookie做免登陆的时候,Cookile是不支持中文
所以必须这样Cookie cookie= new Cookie(URLEncoder.encode(stu.getUsername(), "utf-8"), stu.getStu_password())写,
里面的两个是用户名和密码,像用户名是汉字必须转换字符编码)。
常见就这几种,当然还有堆溢出错误和栈溢出错误,这类问题就是你写的递归太深或者进入死循环!这类问题你可以看看你的逻辑是不是有问题,找到
并解决,优化代码,或者也可以设置java虚拟机的内存设大点。
咳咳咳!最后希望对大家有点帮助,如果有什么不足,可以和我讨论,大家一起进步!