什么是异常?
在程序运行过程中,会发生各种各样的非常情况。针对这些非正常情况,java引入了异常的概念,以异常类的形式对这些非正常类进行封装,通过异常处理机制对程序运行时发生的各种问题进行处理。
异常的分类
Throwable体系架构图(百度图片)Error:称为错误类,他表示java运行时产生的内部错误或资源耗尽的错误,比较严重!仅靠修改程序本身是不能恢复执行的。
Exception:称为异常类,他表示程序本身可以处理的错误。
|Throwable的常用方法
方法声明 | 功能描述 |
---|---|
String getMessage() | 返回异常的详细消息字符串 |
Try…catch 和finally
try{
程序代码块
}catch (ExceptionType e){
//对ExceptionType 的处理
}
finally
不论异常是否产生都要执行。
需要注意的是在try…catch执行System.exit(0)语句时,会退出当前虚拟机,任何代码都不能执行。
throws
在java中用throws关键字对外声明该方法可能发生的异常,在调用者调用该方法时,就明确地知道该方法有异常,并且必须在程序中进行处理,否则编译无法通过。
throws 关键字声明抛出异常的语法格式如下:
public static int shout(int x,int y) throws Exception{}
多配合try…catch语句使用。
try…catch 进行异常处理,throws进行抛出异常。
如果不知道如何处理声明跑出的异常,也可以使用throws关键字继续讲异常抛出,这样程序也能编译通过。但是一旦异常,不被处理的话,程序就会非正常终止。
运行时异常与编译时异常
编译时异常:Exception类中处理RuntimeException类及其子类外都是编译时异常。
处理编译时异常有两种方法:即try…catch和throws
运行时异常:一般是由程序的逻辑错误产生的,在程序运行时无法恢复。
java编译器不会对其进行检查。
自定义异常
在程序开发中可能需要描述程序中特有的异常情况,因此java运行用户自定义异常。
在实际的开发中,如果没有特殊的要求,自定义的异常类只需要继承
Exception类,在构造方法中使用super()语句调用构造方法即可。
public class DivideByMinusException extends Exception {
public DivideByMinusExcepton() {
super();
}
public DivideByMinusExceptiion(String message) {
super(message);
}
}
throw关键字
throw关键字用于在方法中声明抛出异常的实例对象(不是throws)
throw Exception 异常对象。
public class Example05 {
public static void main(String[] args) {
try {
int result = divide(4,-2);
System.out.println(result);
}catch(DivideByMinusExcepton e) {
System.out.println(e.getMessage());
}
}
public static int divide(int x,int y) throws DivideByMinusException{
if(y<0) {
throw new DivideByMinusException("除数是负数");
}
int result = x/y;
return result;
}
}
//Output:除数是负数