异常
1.异常的概念:
异常就是在程序运行时发生的异常事件,和正常情况不一样,有错误出现。在java中,阻止当前方法或作用域的情况,称之为异常。
2.异常的分类:
编辑异常的顶层是:Throwable。Error:是程序中无法处理的错误,表示运行应用程序中出现了严重的错误。此类错误一般表示代码运行时JVM出现问题。通常有Virtual MachineError(虚拟机运行错误),NoClassDefFoundError(类定义错误)等。比如说当jvm耗完可用内存时,将出现OutOfMemoryError。此类错误发生时,JVM将终止线程。非代码性错误。因此,当此类错误发生时,应用不应该去处理此类错误。
Exception:程序本身可以捕获并且可以处理的异常。RuntimeException异常(运行时异常):表示JVM在运行期间可能出现的错误。编译器不会检查此类异常,并且不要求处理异常,比如用空值对象的引用(NullPointerException)、数组下标越界(ArrayIndexOutBoundException)等。此类异常属于不可查异常,一般是由程序逻辑错误引起的,在程序中可以选择捕获处理,也可以不处理。非运行时异常(编译时异常):编译器会检查此类异常,如果程序中出现此类异常,比如说IOException,必须对该异常进行处理,要么使用try-catch捕获,要么使用throws语句抛出,否则编译不通过。
Error 和 Exception的区别:
Error通常是灾难性的致命的错误,是程序无法控制和处理的,用以描述Java运行系统中的内部错误以及资源耗尽的错误;当出现这些异常时,Java虚拟机(JVM)一般会选择终止线程;
Exception通常情况下是可以被程序处理的,并且在程序中应该尽可能的去处理这些异常。
3.常见的异常:
异常类解释说明:
NullPointerException空指针异常:调用了未经初始化的对象或者是不存在的对象。ClassNotFoundException指定的类不存在IndexOutOfBoundsException数组下标越界异常。IllegalArgumentException方法的参数错误ArithmeticException数学运算异常,如:除零异常InputMisMatchException接收的数据类型与实际输入的类型不匹配异常NumberFormatException字符串转换为数字异常SQLException操作数据库异常IOException文件读写异常。
4.异常的处理:
java当中的异常一般是通过5个关键字来处理的:try、catch、finally、throw、throws。
try:监控区域,一般里面放可能出现异常的代码
catch:捕获异常,参数是想要捕获的异常类型
finally:处理善后,里面的代码无论如何都会执行
throw:在语句中抛出异常,后面只能有一个异常对象
throws:在方法中声明可能要抛出的各种异常,后面可以跟多个异常类一般的语法形式为:
try{
//可能会发生异常的程序代码
}catch(Type1 id1) {
//捕获并处理try抛出的异常类型Type1
}catch(Type2 id2) { //捕获并处理try抛出的异常类型Type2
}finally{ //无论是否发生异常,都将执行的语句块 }
try 块:用于捕获异常。其后可接零个或多个catch块,如果没有catch块,则必须跟一个finally块。
catch 块:用于处理try捕获到的异常。
finally 块:无论是否捕获或处理异常,finally块里的语句都会被执行。当在try块或catch块中遇到return语句时,finally语句块将在方法返回之前被执行。其中:Try{}catch(){} finally{}catch代码块可以有多个(有多个是子类异常必须写在前面),其次它也可以省略;Finally 也可以省略,但是catch和finally两个不能同时省略。在以下4种特殊情况下,finally块不会被执行:
1)在finally语句块中发生了异常。
2)在前面的代码中用了System.exit()退出程序。
3)程序所在的线程死亡。
4)关闭CPU。
5.自定义异常自定义异常:
用户可以自定义异常,只需继承Exception类即可。
步骤:
1.创建自定义异常类。
2.在方法中通过throw关键字抛出异常对象。
3.如果在当前抛出异常的方法中处理异常,可以使用try-catch语句捕获并处理;否则在方法的声明处通过throws关键字指明要抛出给方法调用者的异常,继续进行下一步操作。
4.在出现异常方法的调用者中捕获并处理异常。
6.Throw 和throws
抛出异常如果一个方法可能会出现异常,但没有能力处理这种异常,就可以使用throw和throws语句来抛出异常。throw一般写在方法体里面,而throws语句用在方法定义时声明该方法要抛出的异常类型,如果抛出的是Exception异常类型,则该方法被声明为抛出所有的异常。
Throw 和throws 的区别
1.Throw写在方法体里面;而Throws写在方法名的后面
2.Throw 后面只能跟一个异常的对象;
而Throws 后面可以跟的是异常的类,且可以跟很多个异常类。
日志的作用:
日志记录了系统行为的时间、地点、状态等相关信息,能够帮助我们了解并监控系统状态,在发生错误或者接近某种危险状态时能够及时提醒我们处理,同时在系统产生问题时,能够帮助我们快速的定位、诊断并解决问题。
日志的级别
DEBUG:调试级别的⽇志
INFO:正常级别的⽇志
WARN:警告级别的⽇志
ERROR:错误级别的⽇志
FATAL:致命级别的⽇志
级别:FATAL > ERROR > WARN > INFO > DEBUG。
程序会打印高于或等于所设置级别的日志,设置的日志等级越高,打印出来的日志就越少。