Java异常注意事项(一)

异常是一个在程序执行期间发生的事件,它中断了正在执行的程序的正常指令流。

异常捕获结构

try{
//程序代码块
}
catch(Exceptiontype1 e){
//对Exceptiontype1的处理
}
catch(Exceptiontype2 e){
//对Exceptiontype2的处理
}
finally{
//程序块
}

注意:
Exception是try代码传递给catch代码块的变量类型,e是变量名,catch代码块中可输出错误性质,包括以下三种:

  1. getMessage()函数:输出错误性质
  2. toString()函数:给出异常的类型和性质
  3. printStackTrace():指出异常的类型,性质,栈层次及出现在程序中的位置。

无论try-catch是否顺利执行完毕,都会执行finally语句。除了以下四种情况:

  1. 在finally语句块发生异常
  2. 在前面的代码中使用了System.exit()退出程序。
  3. 程序所在的线程死亡
  4. 关闭CPU

自定义异常

package com.company;

public  class MyException extends Throwable {
    public MyException(String ErrorMessagr) {
        super(ErrorMessagr);
    }
}

//测试代码

package com.company;
//创建一个带有int类型的方法avg(),该方法用于检查参数是否小于1或者大于100.
//通过throw关键字抛出MyException异常对象,并在main方法中捕获该异常。
public class Tran {
    static int avg(int number1,int number2) throws MyException{
        if(number1<0||number2<0){               //
            throw new MyException("不可以使用负数");//错误信息
        }
        if(number1>100||number2>100){               //
            throw new MyException("数值太大了");//错误信息
        }
        return (number1+number2)/2;
    }

    public static void main(String[] args) {
        try{
            int result=avg(102,150);
        }catch(MyException e){
            System.out.println(e);//输出异常信息
        }
    }
}

抛出异常

  • 使用throws关键字抛出异常
    通常用于声明方法时,用来指定方法可能抛出的异常
public class Shoot{
		static void pop()throws NegativeArraySizeException{
		  int[]arr=new int[-3];
		}
		psvm{//简写
			try{
				pop();
			}catch(NegativeArraySizeException e){
			System.out.println("pop()方法抛出的异常");
			}

		}
}
  • 适应throw关键字
    通常用于方法体中
package com.company;
//异常捕获顺序实例
import java.lang.System;
import java.lang.ArithmeticException;
public  class  ExceptionOrder{
    static int div(int x, int y) {  //各种Exception都被捕获,函数无须声明异常
        int   r=0;
        try{
            //自己抛出异常对象
            if(y==0) throw  new ArithmeticException( );
            r=x/y; }
        catch(ArithmeticException  ae) {   System.out.print(ae.toString( )); throw ae;  }
        //处理完异常后可以继续抛出异常,交给上层调用者继续处理。注意即使这里抛出异常,同层的finally仍会执行
        //catch子句里抛出异常,这个异常在div方法里没有处理,但是div可以不声明异常?为什么?因为ae是非必检

        catch(Exception  ae){//捕获各种Exception:若是第1个catch,则后续的catch子句无机会捕获
            System.out.print(ae.toString( ));
        }
        finally{  r=-1; }        //无论是否有异常,r=-1
        return  r;
    }
    public  static  void  main(String[ ] args) {
        try{   div(5, 0);   } //调用div(5, 0)后,div函数的执行轨迹已用红色标出
        catch(Throwable  ae) { //任何异常都被捕获,包括Error类型异常
            System.out.print(ae.toString( ));
            //因此虽然div没有异常声明,在main里调用div也用了try/catch
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值