/*
*异常处理方式2 throws
*
- 1,throws + 异常类型写在方法的声明处,指明此方法执行时,可能会抛出的异常。
- 当方法执行出现异常时,会在异常处生成一个异常类的对象,当此对象匹配到throws后声明的异常类型
- 时,就会被抛出,由此方法的调用者处理异常,异常代码之后的语句不再执行。
- 2,throws后面的异常类型可以有多个,使用,隔开。异常类型可以是方法中产生的异常类型,也可以是它的父类。
- 3,try-catch-finally结构是真正的处理掉异常,方法被调用时也不会报异常。
- throws 的方式只是将异常抛出给方法调用者,没有真的把异常处理掉。
- 4,方法重写的时候,子类重写的方法不能抛出比父类更大的异常,
- 父类方法中有抛出多个异常时,子类方法的异常类型不能比父类方法异常类型中最大的那个大。
- 子类必须是父类的异常类型或者其子类。通常使用父类的异常类型。
- 原因:在使用多态性时,try-catch语句里处理的异常类型是父类的类型,如果子类
- 异常类型比父类大,则try-catch语句无法处理,父类的引用就不能使用子类的对象
- 5,当父类方法没有throws异常类型时,子类重写的方法也不能有throws,否则违反第四条。
- 开发中如何选择处理异常的方式:
- 1,父类方法没有throws,子类重写的方法可能有异常,使用try-catch结构处理
- 2,执行的方法A中调用另外的方法B,B又调用C,这几个方法是递进关系执行的,那么这几个方法可以使用throws
- 处理,在执行方法A 的时候使用try-catch结构统一处理,如果分开处理,可能方法C出异常后,数据错误传递到后面的方法中。
- 3,从语法上try-catch可以与throws同时使用,不过很少这样,代码冗余。
- 4,开发中需要收集错误日志,改bug,try-catch只是提供临时预案。
- 总结:改bug是不可避免的。
*/
package exception;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class Exception_Throws {
//main方法中处理异常,避免交给JVM处理,防止报错
public static void main(String[] args) {
Exception_Throws ex = new Exception_Throws();
//两种异常统一处理
try {
ex.method1();
}catch(IOException e) {
System.out.println("程序出错");
}
//先在下一层方法中捕获异常进行处理,无法处理再到上一层处理
try {
ex.method3();
}catch(IOException e) {
System.out.println("程序出错");
}
}
//方法中只抛出异常不处理
public void method()throws FileNotFoundException,IOException {
File file = new File("E:\\eclipse-workspace\\Contacts\\src1.txt");
FileInputStream fis = new FileInputStream(file);
int date = fis.read();
while(date != -1) {
System.out.print((char)date);
date = fis.read();
}
fis.close();
System.out.println("----------");
}
//方法中只抛出父类异常,交给上一层处理
public void method1() throws IOException{
method();
}
//在方法中处理异常,只处理一种,另一种抛出给上一层
public void method3() throws IOException{
try {
method();
}catch(FileNotFoundException e) {
System.out.println("找不到文件");
}
}
public void method4() throws FileNotFoundException,Exception{
}
}
class SubException extends Exception_Throws{
// public void method() throws Exception{//子类重写的方法不能抛出比父类方法中更大的异常
//
// }
public void method() throws FileNotFoundException{
}
public void method4() throws Exception{
}
}