Java的声明抛出异常

声明抛出异常

这个体系中的所有类和对象都具备一个独有的特点;就是可抛性。可抛性的体现:就是这个体系中的类和对象都可以被throws和throw两个关键字所操作。

如果一个方法(中的语句执行时)可能生成某种异常,但是并不能确定如何处理这种异常,则此方法应显示地声明抛出异常,表明该方法将不对这些异常进行处理,而由该方法的调用者负责处理。

在方法声明中用throws语句可以声明抛出异常的列表,throws后面的异常类型可以是方法中产生的异常类型,也可以是它的父类。

语法格式:

[修饰符] 返回值类型 方法名([参数列表])[throws 异常列表]{
   //  throw 异常对象;
}      

throws是方法可能抛出异常的声明。用在声明方法时,表示该方法可能要抛出异常。异常列表位于方法体之前,可抛出多种类型的异常,每个类型之间用逗号隔开。

当某个方法可能会抛出某种异常时用于throws 声明可能抛出的异常,然后交给上层调用它的方法程序处理。

 

人工抛出异常

Java异常类对象除在程序执行过程中出现异常时由系统自动生成并抛出,也可根据需要人工创建并抛出。首先要生成异常类对象,然后通过throw语句实现抛出操作(提交给Java运行环境)。       

IOException e = new IOException();
throw e;

可以抛出的异常必须是Throwable或其子类的实例。下面的语句在编译时将会产生语法错误:

 throw new String("抛出异常");

throw 和throws关键字的区别

throw用于抛出异常对象,后面跟的是异常对象;throw用在方法内。

throws用于抛出异常类,后面跟的异常类名,可以跟多个,用逗号隔开;throws用在方法上。

 

重写方法声明抛出异常的原则

重写方法不能抛出比被重写方法范围更大的异常类型。在多态的情况下,对testMethod()方法的调用-异常的捕获按父类声明的异常处理。

public class A {
    public void testMethod() throws IOException {
        // ……
    }  
}
public class B extends A {
    public void testMethod() throws FileNotFoundException {
        // ……
    }  
}
public class C extends A {
    public void testMethod() throws Exception {  // 报错
        // ……
    }  
}

注意:

如果父类或者接口中的方法没有抛出过异常,那么子类是不可以抛出异常的,如果此时子类的覆盖的方法中出现了异常,只能try不能throws。

如果这个异常子类无法处理,已经影响了子类方法的具体运算,这时可以在子类方法中,通过throw抛出RuntimeException异常或者其子类,这样,子类的方法上是不需要throws声明的。

 

异常处理原则

功能抛出几个异常,功能调用如果进行try处理,需要与之对应的catch处理代码块,这样的处理有针对性,抛几个就处理几个。特殊情况:try对应多个catch时,如果有父类的catch语句块,一定要放在下面。

通常情况:方法内容如果有throw,抛出异常对象,并没有进行处理,那么函数上一定要声明,否则编译失败。但是也有特殊情况。

 

定义异常处理时,什么时候定义try,什么时候定义throws呢?

功能内部如果出现异常,如果内部可以处理,就用try;

如果功能内部处理不了,就必须声明出来,让调用者处理。

                                              

处理异常时不可以直接打印,或者直接输出,正确的处理方式:

1)根据异常情况处理对应的逻辑

2)使用文件记录异常,便于日后查看

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值