java 中的异常处理

所有的异常都有一个超类throwable;

throwable有两个子类:Exception和error(一般在重大错误,不能够自行恢复);

Exception有两个子类:checked和runtime exception异常;

checked:检查时异常,就是程序代码有的错误会有红色波浪线的异常,在运行之前会提示出来;

runtime exception:运行时有错误会报出的异常如空指针异常和下标越界异常;

进行异常处理有以下两个方法:

1、使用try{}  catch(异常种类){}

try 里面一般是一整个功能在一起,有时候需要自己进行判断,有时是程序会自动提示需要加上try.....catch进行处理。

如下面的代码:

int a=3;
int b=0;
System.out.println(a/b);

System.out.println("除法运算");

会产生异常:

Exception in thread "main" java.lang.ArithmeticException: / by zero
at anli.f.main(f.java:7)

这个时候如果不处理会报出如下异常,是虚拟机自动处理之后程序终止,后面的程序就不在执行,如果不想程序就此终止可以加上try...catch进行处理;

try {
int a = 3;
int b = 0;
System.out.println(a / b);
} catch (Exception e) {
// TODO: handle exception
System.out.println("除数不能为0!");
}
System.out.println("除法运算");

输出结果:

除数不能为0!
除法运算

另外还有一种模式:try....catch....finally;不管是否会发生异常都会处理finally的代码块除非用system.exist(0)进行了处理;

示例如下:

try {
int a = 3;
int b = 0;
System.out.println(a / b);
} catch (Exception e) {
// TODO: handle exception
System.out.println("除数不能为0!");
}finally {
System.out.println("finally代码块");
}
System.out.println("除法运算");

结果:

除数不能为0!
finally代码块
除法运算

注意:try可以和catch或者finally分别使用,但是不能单独使用

2、throws和throw;

throws:抛出异常声明,说明有异常,但不进行处理。抛出异常让程序的调用者进行处理,如果一直都不进行try....catch处理就会最终交给虚拟机处理;

throw:抛出一个异常,一般用于抛出一个新的异常或者自定义异常;

用法实例:

public void div(int a,int b) throws Exception{
if(b==0){
throw new Exception("除数不能为零");
}
System.out.println(a/b);
}

f fm=new f();
int a=4;
int b=0;
try {
fm.div(a, b);
} catch (Exception e) {
// TODO Auto-generated catch block
e.getMessage();//获取异常信息可以有这个和下面一行的方法;
e.printStackTrace();
}

System.out.println("除法运算");

结果:

java.lang.Exception: 除数不能为零
at anli.f.div(f.java:21)
at anli.f.main(f.java:10)
除法运算

注意:可以使用多重try....catch........catch;

子类异常在前面,父类异常在后面,一般最后的异常一般是exception;

3、自定义异常类;

可以自定义一个异常继承一个异常类,如exception或者runtime exception;

在使用的时候需要使用throw 抛出一个自定义异常;

如定义一个 AgeException extends Exception{

里面需要继承父类的构造方法,可以自定义生成;

};

在使用的时候只需要在在throw时抛出:

throw new AgeException("除数不能为零");

把上面的代码throw new exception改为上面代码,最后会抛出Age Exception;

4、throw和throws的区别:

a. 作用不同,throws是声明异常,throw是抛出异常;

b.作用位置不同,throws是在类后面声明,可以声明抛出多个异常,throw是抛出一个异常对象;

c.定义字眼不同;

猜你喜欢

转载自www.cnblogs.com/sw-123/p/9333872.html