什么是异常呢,异常就是程序出现了错误
那我们处理异常有什么方式呢,还有个点,我们在处理异常的时候对编译异常和运行异常有不同的处理方式
什么是编译异常、运行异常呢?
编译异常,同名字,就是编译的时候出现的错误
运行异常就是在程序运行的时候出现的异常
处理异常的方式
1、throws
格式:
public void 方法() throws 异常类名 {
}
-
这个throws格式是跟在方法的括号后面的
-
编译时异常必须要进行处理,两种处理方案:try...catch …或者 throws,如果采用 throws 这种方案,在方法上进行显示声明,将来谁调用这个方法谁处理
-
运行时异常因为在运行时才会发生,所以在方法后面可以不写,运行时出现异常默认交给jvm处理
2、try...catch …
格式:
try {
可能出现异常的代码;
} catch(异常类名 变量名) {
异常的处理代码;
}
在使用try...catch …的注意点,要把可能出现异常的代码放在try中,当遇到异常的时候,就会进入catch中,这个时候,出现异常代码后续的代码不会在执行,当执行完catch中的代码之后,try...catch …之后的代码还是会执行的
3、throw
我记得我才学的时候就有点分不清throws和throw
throws是处理编译异常的,位置是在方法名称的后面,方法不进行处理异常,谁调用这个方法,谁处理异常
而throw是在方法内部的 ,格式是:throw new 异常();表示是抛出一个异常,下面的代码就不会再执行啦
Exception和Error的父类
Throwable
它的常用方法:printStackTrace(把异常的错误信息输出在控制台 )
还有一种特殊的异常(自定义异常)
-
实现步骤
-
定义异常类
-
写继承关系
-
提供空参构造
-
提供带参构造
-
格式:
public class AgeOutOfBoundsException extends RuntimeException {
public AgeOutOfBoundsException() {
}
public AgeOutOfBoundsException(String message) {
super(message);
}
}
这个时候我们就可以使用throw 来手动抛出我们的自定义异常
在项目中常遇到的异常:
public class AgeOutOfBoundsException extends RuntimeException {
public AgeOutOfBoundsException() {
}
public AgeOutOfBoundsException(String message) {
super(message);
}
}
我们常见的一些异常:
1、算术异常类:ArithmeticException
2、空指针异常类:NullpointerException
3、类型强制转换异常:ClassCastException
4、下标越界异常:IndexOutOfBoundsException
5、文件未找到异常:FileNotFoundException
6、操作数据库异常:SQLException
7、I/O 异常的根类:IOException
8、线程中断:InterruptedException
9、试图将错误类型的对象存储到一个对象数组时抛出的异常:ArrayStoreException