异常的继承结构
Error类是错误,描述了Java运行时内部错误和资源耗尽的错误。一旦出现,程序报错,无法处理。
Exception类是异常,分了两个IOException也就是IO异常,和RuntimeExption运行时异常。
异常处理
- try..catch
- try..finally
- try..catch..finally
在catch中可以通过异常类提供的printStackTrace()方法进行异常信息的输出。
finally不管是否有异常都会执行。
throws关键字
可以给方法生名throws关键字去抛出异常。
public class Hello {
public static void main(String[] args) {
try {
System.out.println(cal(5,0));
}catch (Exception e){
e.printStackTrace();
}
}
public static int cal(int x,int y) throws Exception{
return x/y;
}
}
主方法本身也属于一个方法,所以主方法上也可以使用throws进行异常抛出,这个时候如果产生了异常就会交给JVM处理。
throw关键字
throw是直接写在语句中的,表示认为的抛出异常。
public class Hello {
public static void main(String[] args) throws Exception{
try {
throw new Exception("异常");
} catch (Exception e){
e.printStackTrace();
}
}
}
throws和throw的区别
- throw用于方法内部,主要表示手工异常抛出。
- throws主要在方法声明上使用,明确告诉用户本方法可能产生的异常,同时该方法可能不处理此异常。
RuntimeException类
使用RuntimeException定义的异常类可以不用强制性进行异常处理。
Exception与RuntimeException的区别:
- Exception是RuntimeException的父类。
- 使用Exception定义的异常都要求必须使用异常处理。
- 使用RuntimeException定义的异常可以由用户选择性的来进行异常处理。
请列举几个常见的RuntimeException:
ClassCastException(强制转换类型异常)、NullPointerException(空指针异常)。