admin管理员组

文章数量:1576291

一.try:放置可能引发异常的代码 catch:处理异常的代码

一个try语句块被执行一次,则只有一个catch语句被执行

try语句中声明的变量是代码块内部局部变量,catch内不能访问

程序不能使用catch对象来捕获error异常

二.常见的异常类型:

IndexOutOfBoundExeption,数组越界异常

NumberFormatException数字格式异常

ArithmeticException除0异常

Exception处理未知异常

NUllPointerException空指针异常

先处理小异常,后处理大异常,所有父类异常的catch块应该都排在子类异常的catch块后面

多异常捕获类型用|隔开

捕获多种异常时,异常有隐式的final修饰

三.访问异常信息

getMessage():返回该异常的描述字符串

printStackTrace():将该异常的标准错误输出

printStacktrace(PrintStream s):将异常信息的跟踪栈输出到指定流

getStackTrace():返回异常的跟踪信息

四.finally:用于回收在try中打开的资源

java的垃圾回收机制不会回收任何物理资源

finally语句块总是执行

如果在异常代码处理中使用System.exit(1)来退出虚拟机,finally将失去执行的机会

finally中使用了return语句或者throw语句,导致try和catch语句块中的return和throw失去执行机会

五.throws:主要用于方法签名

当前方法不知道如何处理异常的时候,由上一级调用者进行处理(即使用main方法的时候进行处理),否则交给JVM进行处理

一旦使用throws抛出异常,就无需try...catch语句进行处理

如果某段代码调用了一个带throws声明的方法,并且该方法抛出了一个Checked异常,调用方法要么放在try块中捕获异常,要么放在一个带throws声明抛出的方法中

子类方法声明抛出的异常不允许比父类方法声明中抛出的异常多

六.throw:用于抛出一个实际的异常

其抛出的不是异常类而是一个异常实例,且每次只能抛出一个异常实例,Java收到其抛出的异常的时候,终止当前执行流,跳到相应的catch块,由catch块处理该异常。如果throw语句抛出的异常是Check异常,则该throw语句要么处于try块中显式捕获改异常,要么放在一个带throws声明抛出的方法中。

catch语句和throw同时使用,再次捕获异常。可以防止恶意用户。

七.异常有两种:Checked和Runtime异常

check异常必须处理,使用try..catch语句捕获处理;不知如何处理的时候在定义方法时声明抛出异常

runtime异常无需处理

注意:

1.不要使用异常处理代替正常的业务逻辑处理

2.不要使用庞大的try代码块

3.避免使用Catch All语句

4.不要忽略捕获到的异常,在catch语句中要对其进行合适的处理/重新抛出异常,交给上层调用者进行处理/如果当前不知道如何处理异常,就不要在当前层使用catch语句来捕获该异常,直接使用throws声明抛出该异常,让上层调用者来处理。

本文标签: 异常Java