1.异常处理的意义*
使得程序发生异常的时不会立即退出,可以继续运行后面的语句,而且可以利用catch中的语句处理异常(一般为输出异常信息)便于我们更好的运行程序修改异常
2.异常的分类
运行时异常:程序运行起来才能发现的错误,如数组下标越界,空指针等。如果出现运行时异常一定是程序员的问题
包括:RuntimeException及其子类。
RuntimeException及其子类包括:
□ ArithmeticException:数学计算异常。
□ NullPointerException:空指针异常。
□ NegativeArraySizeException:负数组长度异常。
□ ArrayOutOfBoundsException:数组索引越界异常。
□ ClassNotFoundException:类文件未找到异常。
非运行时异常(编译异常):程序运行环境导致,不是程序自身的问题 包括:
□ NoSuchMethodException:方法未找到异常。
□ IOException:输入输出异常。
□ EOFException:文件已结束异常。
□ FileNotFoundException:文件未找到异常。
□ NumberFormatException:字符串转换为数字异常。
□ SQLException:操作数据库异常
检查异常:就是非运行时异常,编译器要求你必须处理的异常
非检查异常:就是运行时异常,编译器不要求强制处理的异常。
3.异常处理的两种方式:
1)只是向上抛出,不作处理:(继续抛出,消极的方法,一直可以抛到java虚拟机来处理,就是通过throws exception抛出。)
class MyException extends Exception{//定义自己的新异常的时候是不是只要有构造函数就可以吗
MyException (String s){//构造函数前不加public可以吗?
super(s);
}
}
public class Main{
int b;
void set(int a) throws MyException {//声明异常??表示这个类里面可以用这个异常?
if(a==1)throw new MyException("输入的是一");
int b=a;//有异常的话后面的语句就不会执行了
System.out.println("此时b的值为:"+b);
//那为什么说异常可以阻止程序非正常退出呢??
}
public static void main(String args[]) throws MyException {
Main w=new Main();
//try {
w.set(1);//有抛出异常的语句要么就try要么就继续抛出
//} catch (MyException e) {
// e.printStackTrace();
// }
System.out.println("程序还可以运行");
}
}
/*
输出结果:
Exception in thread "main" MyException: 输入的是一
at Main.set(Main.java:10)
at Main.main(Main.java:18)
*/
2)用try…catch捕获,程序仍能继续向下运行
注意,对于检查的异常必须处理,或者必须捕获或者必须抛出
class MyException extends Exception{//定义自己的新异常的时候是不是只要有构造函数就可以吗
MyException (String s){//构造函数前不加public可以吗?
super(s);
}
}
public class Main{
int b;
void set(int a) throws MyException {//声明异常??表示这个类里面可以用这个异常?
if(a==1)throw new MyException("输入的是一");
int b=a;//有异常的话后面的语句就不会执行了
System.out.println("此时b的值为:"+b);
//那为什么说异常可以阻止程序非正常退出呢??
}
public static void main(String args[]) throws MyException {
Main w=new Main();
try {
w.set(1);//有抛出异常的语句要么就try要么就继续抛出
} catch (MyException e) {
e.printStackTrace();
}
System.out.println("程序还可以运行");
}
}
/*
运行结果:
MyException: 输入的是一
at Main.set(Main.java:10)
at Main.main(Main.java:18)
程序还可以运行
*/