一、异常的分类
Error:一般由jdk生成并脱出,程序员无法控制。
CheckException:在编译时出现。
RuntimeException:在编译时不会出现,而在程序运行时会出现。
二、制造异常 throw
if(a < 10){
throw new NullPointerException;//创建一个新的空指针异常
throw new NullPointerException("空指针异常");//创建一个新的空指针异常
}
三、处理异常 throws、try…catch
(一)throws抛出异常
void test() throws NullPointerException{//因为下面创建了一个异常,执行该方法必会有异常发生,所以需要将异常抛出
throw new NullPointerException;//创建一个新的空指针异常
}
注意
- 抛出异常,是将异常抛给上一层,,谁调用谁处理。
void text1(){
text();//异常在此处被接收,需要使用try...catch捕获异常,或者再次使用throws向上级抛出异常
}
void test() throws NullPointerException{
throw new NullPointerException;
}
- 如果父类方法存在异常抛出,子类重写方法抛出异常范围要小于或等于父类。
interface Father{
public void test() throws NullPointerException;//public void test() throws Exception;
}
class Child implements Father{
void test() throws NullPointerException{
throw new NullPointerException;
}
}
(二)try…catch捕获异常
try{
代码;
}catch(异常名 对象名){
e....
如果出现这个类型的异常,就执行的代码
}
....
}finally{
一定会执行的代码
}
注意
- 异常捕获,在遇到异常的直接捕获某个异常对象,使用异常的功能。
- 如果try中遇到异常了,try中下面的代码不会执行,直接去执行对应catch中的内容,如果没有遇到异常,正常执行所有的try中代码。
- 一个try后可以跟一到多个catch,捕获小范围的异常catch写在上面。
- finally中的内容无论当前是否遇到异常都会执行。
四、常见运行时异常RuntimeException:
1.空指针 NullPointerException
2.数组索引越界 ArrayIndexOutOfBoundsException
3.类型转换异常 ClassCastException
4.数学异常 ArithmeticException
5.负数异常 NegativeArraySizeException
6.数字格式异常 NumberFormatException
五、自定义异常类:
异常类要继承Exception | RuntimeException 等子类
class TestException extends Exception{
public TestException(){ };// 默认构造器
public TestException(String s){
super(s);//传给Throwable的带String参数的构造方法
};
}
//测试类:
class Text1{
public void a throws TestException;{
if(a < 10){
throw new TestException;//创建一个新的空指针异常
}
}
}
public class Test2 {
public static void main(String[] args) {
int i=5;
Text1 t1 = new Text1();
try {
t1.a(i);
} catch (TestException e) {// 用自己的异常类来捕获异常
e.printStackTrace();
}
}
}