java异常3异常处理之throws结构

/*
*异常处理方式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{
		
	}
    
}
发布了47 篇原创文章 · 获赞 1 · 访问量 1037

猜你喜欢

转载自blog.csdn.net/wisdomcodeinside/article/details/104500280
今日推荐