JAVA的异常处理操作

1.异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。

异常分为两种,一种为编译异常,一种是运行异常,如下图所示:

红色:编译时异常

蓝色:运行时异常

NumberFormatException (数据类型不一致)

ArrayIndexOutOfBoundsException(缺少命令行参数)

ArithmeticException(算术异常)

ArrayStoreException(数组存储异常)

ArrayIndexOutOfBoundsException(下标超界)

这里为部分Exception异常的子类

回避异常:在方法声明中包含throws子句,通知潜在调用者,如果发生了异常,必须由调用者处理

如下所示:

"throws + 异常类型'写在方法声明处;

"throw new 异常类型",自定义异常;

一旦方法执行时,出现异常,仍会在异常代码处生成一个异常对象,此对象满足throws后异常类型时,就会抛出异常代码后续代码就不再执行了。 

try-catch-finally

使用try将可能出现异常的代码包装起来,在执行的过程中,一旦出现异常,就会生成一个对应的异常类的对象,根据此对象的类型去catch中进行匹配

一旦匹配到某个catch时,就进入catch中进行异常处理

catch中的异常类型如果满足子父类关系,则要求子类一定要声明在父类的上面

常用异常对象处理方式:

1.String

2.e.getMessage

3.e.printStackTrace

注意:throw 的方法只是将异常抛给了方法的调用者,并没有真正将异常处理掉

但是try-catch-finally是真正的在处理异常

子类重写的方法抛出的异常类型不大于父类被重写方法抛出的异常

如果父类中被重写的方法没用throw方法,则子类也不能使用throw方式,意味着如果子类重写的方法中有异常,必须使用try-catch-finall方式处理

所以建议执行方法a中,先后调用了其他几个方法,这几个方法是递进的,建议这几个方法用throw的方式处理,a中用try-catch-finally来处理。

如下是我课上的例题:

实验二:编写应用程序ExceptionTest.java,接收命令行的两个参数,要求不能输入负数,计算两数相除。

对数据类型不一致(NumberFormatException)、缺少命令行参数(ArrayIndexOutOfBoundsException)、除0(ArithmeticException)及输入负数( NegativeInputException 自定义异常)进行异常处理

提示:

  1. 主类ExceptionTest中定义异常方法test完成两数相除功能。
  2. 在main()方法中使用异常处理语句进行异常处理
  3. 在程序中,自定义对应输入负数的异常类NegativeInputException
  4. 运行时接受参数 java ExceptionTest 20 10(即args[0]=“20”,args[1] = “10”)
  5. Integer类的static方法parseInt(String s)将s转换成对应的int值。如:int a = Interger.parseInt(“3.14”);//a = 3.14

package demo;

public class ExceptionTest {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        try {
            int num1 = Integer.parseInt(args[0]);
            int num2 = Integer.parseInt(args[1]);
            int result = dividing(num1,num2);
            System.out.println(result);
        }catch(NumberFormatException e) {
            System.out.println("数据类型不一致");
        }catch(ArrayIndexOutOfBoundsException e) {
            System.out.println("缺少命令行参数");
        }catch(ArithmeticException e) {
            System.out.println("除数不能为0");
        }catch(NegativeInputException e) {
            System.out.println(e.getMessage());
        }            
    }
    public static int dividing(int a,int b) throws NegativeInputException {
        if(a<0||b<0) {
            throw new NegativeInputException();
        }
        return a/b;
        
    }
}
 

自定义异常类:

package demo;

public class NegativeInputException extends Exception {
    static final long serialVersionUID = -33875164229948L;
    public NegativeInputException() {
        // TODO Auto-generated constructor stub
    }
    public NegativeInputException(String message) {
        super(message);
        // TODO Auto-generated constructor stub
    }

}
 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值