异常处理二:throws +异常类型

简介: 异常处理二:throws +异常类型

异常处理二:throws +异常类型

1."throws +异常类型"写在方法的声明处。指明此方法执行时,可能会抛出的异常类型。一旦当方法体执行时,出现异常,仍会在异常代码处生成一个异常类的对象,此对象满足throws后异常类型时,就会抛出。异常代码后续的代码,就不在执行了!

2.体会:try-catch-finally:真正的将异常给处理掉了。throws的方式只是将异常抛给了方法的调用者。并没有真正将异常处理掉。

3.开发中如何选择try-catch-finally还是throws

3.1 如果父类中被重写的方法没有throws方式处理异常,则子类重写的方法也不能使用throws,意味着如果子类重写的方法有异常,必须使用try-catch-finally的方式处理。见《overrideTest》。

3.2 执行的方法中,先后有调用了另外的几个方法,这几个方法时递进关系执行的。我们建议这几个方法使用throws的方式进行处理。而执行的方法a可以考虑使用try-catch-finally方式进行处理。

在B站学习java写的代码

代码如下

/*
 * 异常处理的方式二:throws +异常类型
 * 
 * 1."throws +异常类型"写在方法的声明处。指明此方法执行时,可能会抛出的异常类型。
 *    一旦当方法体执行时,出现异常,仍会在异常代码处生成一个异常类的对象,此对象满足throws后异常
 *    类型时,就会抛出。异常代码后续的代码,就不在执行了!
 * 2.体会:try-catch-finally:真正的将异常给处理掉了。
 *      throws的方式只是将异常抛给了方法的调用者。并没有真正将异常处理掉。
 * 
 * 3.开发中如何选择try-catch-finally还是throws
 *  3.1 如果父类中被重写的方法没有throws方式处理异常,则子类重写的方法也不能使用throws,意味着如果
 *    子类重写的方法有异常,必须使用try-catch-finally的方式处理。见《overrideTest》。
 *  3.2 执行的方法中,先后有调用了另外的几个方法,这几个方法时递进关系执行的。我们建议这几个方法使用throws
 *    的方式进行处理。而执行的方法a可以考虑使用try-catch-finally方式进行处理。
 *  
 * 
 */

ExceptionTest2类

package com.day0203_1;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class ExceptionTest2 {
  public static void main(String[] args) {
    try {
      method2();
    } catch (IOException e) {
      e.printStackTrace();
    }
    method3();
  }
  public static void method3() {
    try {
      method2();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
  public static void method2()throws IOException {
    method1();
  }
  public static void method1() throws FileNotFoundException,IOException{
    File file =new File("hello.txt");
    FileInputStream fis=new FileInputStream(file);
    int data=fis.read();
    while(data !=-1) {
      System.out.print((char)data);
      data=fis.read();
    }
    fis.close();    
  }
}

OverrideTest类

package com.day0203_1;
import java.io.FileNotFoundException;
import java.io.IOException;
/*
 * 方法重写的规则之一:
 * 子类重写的方法抛出的异常类型不大于父类被重写的方法抛出的异常类型。
 * 
 */
public class OverrideTest {
  public static void main(String[] args) {
    OverrideTest test =new OverrideTest();
    test.display(new Subclass());
  }
  public void display(SuperClass s) {
    try {
      s.method();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}
class SuperClass{
  public void method() throws IOException{
  }
}
class Subclass extends SuperClass{
  public void method() throws FileNotFoundException{
  }
}
相关文章
|
1月前
|
搜索推荐
在 catch 代码块中处理多个异常类型
【10月更文挑战第12天】 在 catch 代码块中处理多个异常类型
49 2
|
3月前
|
网络协议 Java 数据库连接
13 Java异常(异常过程解析、throw、throws、try-catch关键字)
13 Java异常(异常过程解析、throw、throws、try-catch关键字)
77 2
|
5月前
|
C++
C++一分钟之—异常处理try-catch
【6月更文挑战第22天】C++异常处理机制,借助`try`、`catch`、`throw`管理错误,优雅处理异常,防止程序崩溃。`try`包围可能出错的代码,`catch`捕获异常,`throw`引发异常。基本结构是:`try-catch`块中,未捕获的异常将向上抛出。多`catch`块可按顺序捕获不同类型的异常。易错点包括忽视异常传播、不精确的`catch`和资源未清理。通过精确捕获、RAII技术和适当的异常策略,提升代码健壮性和效率。
41 1
|
Java 程序员 API
异常(中)创建自定义异常,throw,throws关键字抛出异常
异常(中)创建自定义异常,throw,throws关键字抛出异常
109 0
|
6月前
|
C++
C++异常处理try和throw以及catch的使用
C++异常处理try和throw以及catch的使用
|
6月前
|
监控 Java 程序员
详解Java中的异常体系结构(throw,throws,try-catch,finally,自定义异常)
详解Java中的异常体系结构(throw,throws,try-catch,finally,自定义异常)
145 0
|
消息中间件 Java 中间件
业务中 自定义异常用 Exception 还是 RuntimeException? 为什么?
今天和同事 聊了下异常 相关的事,整理在此 目前公司中使用的 自定义异常是 extend RuntimeException
112 1
|
Java 编译器 程序员
Java异常Exception详解
Java异常Exception详解
30568 0
Java异常Exception详解
|
SQL 数据安全/隐私保护
异常处理与自定义异常
异常处理与自定义异常
58 0
|
Java 程序员 编译器
异常(Exception)
异常(Exception)
106 0
异常(Exception)