异常的处理
检测异常,并处理
public static void main(String[] args){
int a = 1;
int b = 0;
try{//放入可能会产生异常的代码块
System.out.println(a/b);
} catch(ArithmeticException e){//catch(异常的类型) 捕获异常
System.out.println("除数不能为0");
} catch(){}
finally{//处理善后工作,通常用来关闭IO流、资源等
System.out.println("finally");
}
}
注意:
- 可以没有finally,但一定要有try-catch语句
- catch语句可以有多个,即可以捕获多个异常
- 但由于是顺序执行,所以注意捕获异常的级别,要从小到大捕获异常
- 在多重catch块最后,可以捕获一个最大的异常,即catch(Exception e)来防止可能会被遗漏的异常
- 尽量添加finally语句块去释放占用的资源
快捷键:选定可能会产生异常的代码块,按住Ctrl+Alt+T,弹窗中可选择try-catch-finally
主动抛出异常,并处理
一般在方法中使用,关键字:throw
//class Test;
public static void main(String[] args){
new test().test(1,0);
}
public void test(int a,int b){
try{//放入可能会产生异常的代码块
if(b==0){//throw
trhow new ArithmeticException();//主动抛出异常
}
System.out.println(a/b);
}
若方法中处理不了,可以在方法上抛出异常,关键字:throws
//class Test;
public static void main(String[] args){
try{
new test().test(1,0);
} catch(ArithmeticException e){
e.PrintStackTrace();
}
}
public void test(int a,int b) throws ArithmeticException{
try{//放入可能会产生异常的代码块
if(b==0){//throw
trhow new ArithmeticException();//主动抛出异常
}
System.out.println(a/b);
}
自定义异常类
用的不多,Java自带的异常类有很多
public class MyException extends Exception{
//传入的数字若等于0
private int detail;
public MyException(int a){
detail = a;
}
//toString()方法,打印出异常的信息
@Override
public String toString(){
return "MyException{"+
"detail="+detail
+"};"
}
}
class Test{
public static void main(String[] args){
try{
new Test().add(0);
}catch(MyException e){
system.out.println("MyException:"+e);
}
}
public void add(int a) throws MyException {
System.out.println("传递的参数为:"+a);
if(a==0){
throw new MyException();
}
}
}