Java基础 day11

异常的处理

检测异常,并处理

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();
	}
    }
}