异常处理的方式2:throws

2024-04-06 16:28
文章标签 异常 处理 方式 throws

本文主要是介绍异常处理的方式2:throws,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

异常处理的方式2:throws
1. 格式:在方法的声明除,使用"throws 异常类型1,异常类型2,..."2. 举例:public void test() throws 异常类型1,异常类型2,.. {//可能存在编译时异常
}

package chapter09_exception.src.com.atguigu03._throws;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;/*** @author 尚硅谷-宋红康* @create 15:24*/
public class ThrowsTest {public static void main(String[] args) {methond3();}public  static  void  methond3  (){try {methond2();} catch (FileNotFoundException e) {e.printStackTrace();}catch (IOException e) {e.printStackTrace();}}public static  void  methond2() throws FileNotFoundException, IOException {method1();}public static void method1() throws FileNotFoundException, IOException {File file = new File("D:\\hello.txt");FileInputStream fis = new FileInputStream(file); //可能报FileNotFoundExceptionint data = fis.read(); //可能报IOExceptionwhile(data != -1){System.out.print((char)data);data = fis.read(); //可能报IOException}fis.close(); //可能报IOException}}

 

3. 是否真正处理了异常?
> 从编译是否能通过的角度看,看成是给出了异常万一要是出现时候的解决方案。此方案就是,继续向上抛出(throws)。
> 但是,此throws的方式,仅是将可能出现的异常抛给了此方法的调用者。此调用者仍然需要考虑如何处理相关异常。从这个角度来看,throws的方式不算是真正意义上处理了异常。
4. 方法的重写的要求:(针对于编译时异常来说的)
子类重写的方法抛出的异常类型可以与父类被重写的方法抛出的异常类型相同,或是父类被重写的方法抛出的异常类型的子类。

package chapter09_exception.src.com.atguigu03._throws;import java.io.FileNotFoundException;
import java.io.IOException;/*** ClassName: OverrideTest* Package: chapter09_exception.src.com.atguigu03._throws* Description:** @Author 小白* @Create 2024/4/6 14:24* @Version 1.0*/
public class OverrideTest {public static void main(String[] args) {Father f =new Son();try {f.method1();} catch (IOException e) {e.printStackTrace();}//父类调用方法用Number接收  因为父类的返回值就是 Number  实际执行的时候是子类重写的方法//子类返回的是Integer  体现的是多态性Number n= f.method4();}}//因为多态性 编译看父类 所以编译时的异常在父类(比如本例中父类的异常IOException已经处理了)
// 就已经处理了(就已经try{}catch{}了)
// 所以子类的 throws异常(比如本例的FileNotFoundException异常)不能大于父类的异常
class  Father{public  void method1() throws IOException {}//父类没有抛出异常 刚子类就不要去抛public  void method2()  {}public  void method3()  {}public  Number method4()  {return  null;}}class Son extends Father{public void  method1() throws FileNotFoundException {}//父类没有抛出异常 则类就不要去抛  也就是不能用throws  如果子类有异常只能只能try{}catch{}
//    public  void method2() throws IOException {
//
//    }//虽然说父类没有抛出异常 则子类就不要去抛  但是可以抛运行时异常  不过写不写throws RuntimeException//都没有多大关系 也就是说子类这边也是可以不用抛public  void method3 () throws RuntimeException {}public  Integer method4()  {return  null;}}

 

5. 开发中,如何选择异常处理的两种方式?(重要、经验之谈)
- 如果程序代码中,涉及到资源的调用(流、数据库连接、网络连接等),则必须考虑使用try-catch-finally来处理,保证不出现内存泄漏。
- 如果父类被重写的方法没有throws异常类型,则子类重写的方法中如果出现异常,只能考虑使用try-catch-finally进行处理,不能throws。
- 开发中,方法a中依次调用了方法b,c,d等方法,方法b,c,d之间是递进关系。此时,如果方法b,c,d中有异常,我们通常选择使用throws,而方法a中通常选择使用try-catch-finally。

这篇关于异常处理的方式2:throws的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/880306

相关文章

Spring IOC的三种实现方式详解

《SpringIOC的三种实现方式详解》:本文主要介绍SpringIOC的三种实现方式,在Spring框架中,IOC通过依赖注入来实现,而依赖注入主要有三种实现方式,构造器注入、Setter注入... 目录1. 构造器注入(Cons编程tructor Injection)2. Setter注入(Setter

Spring Boot统一异常拦截实践指南(最新推荐)

《SpringBoot统一异常拦截实践指南(最新推荐)》本文介绍了SpringBoot中统一异常处理的重要性及实现方案,包括使用`@ControllerAdvice`和`@ExceptionHand... 目录Spring Boot统一异常拦截实践指南一、为什么需要统一异常处理二、核心实现方案1. 基础组件

Java中List转Map的几种具体实现方式和特点

《Java中List转Map的几种具体实现方式和特点》:本文主要介绍几种常用的List转Map的方式,包括使用for循环遍历、Java8StreamAPI、ApacheCommonsCollect... 目录前言1、使用for循环遍历:2、Java8 Stream API:3、Apache Commons

一文详解Python中数据清洗与处理的常用方法

《一文详解Python中数据清洗与处理的常用方法》在数据处理与分析过程中,缺失值、重复值、异常值等问题是常见的挑战,本文总结了多种数据清洗与处理方法,文中的示例代码简洁易懂,有需要的小伙伴可以参考下... 目录缺失值处理重复值处理异常值处理数据类型转换文本清洗数据分组统计数据分箱数据标准化在数据处理与分析过

mysql外键创建不成功/失效如何处理

《mysql外键创建不成功/失效如何处理》文章介绍了在MySQL5.5.40版本中,创建带有外键约束的`stu`和`grade`表时遇到的问题,发现`grade`表的`id`字段没有随着`studen... 当前mysql版本:SELECT VERSION();结果为:5.5.40。在复习mysql外键约

虚拟机与物理机的文件共享方式

《虚拟机与物理机的文件共享方式》文章介绍了如何在KaliLinux虚拟机中实现物理机文件夹的直接挂载,以便在虚拟机中方便地读取和使用物理机上的文件,通过设置和配置,可以实现临时挂载和永久挂载,并提供... 目录虚拟机与物理机的文件共享1 虚拟机设置2 验证Kali下分享文件夹功能是否启用3 创建挂载目录4

linux报错INFO:task xxxxxx:634 blocked for more than 120 seconds.三种解决方式

《linux报错INFO:taskxxxxxx:634blockedformorethan120seconds.三种解决方式》文章描述了一个Linux最小系统运行时出现的“hung_ta... 目录1.问题描述2.解决办法2.1 缩小文件系统缓存大小2.2 修改系统IO调度策略2.3 取消120秒时间限制3

Linux alias的三种使用场景方式

《Linuxalias的三种使用场景方式》文章介绍了Linux中`alias`命令的三种使用场景:临时别名、用户级别别名和系统级别别名,临时别名仅在当前终端有效,用户级别别名在当前用户下所有终端有效... 目录linux alias三种使用场景一次性适用于当前用户全局生效,所有用户都可调用删除总结Linux

Mybatis官方生成器的使用方式

《Mybatis官方生成器的使用方式》本文详细介绍了MyBatisGenerator(MBG)的使用方法,通过实际代码示例展示了如何配置Maven插件来自动化生成MyBatis项目所需的实体类、Map... 目录1. MyBATis Generator 简介2. MyBatis Generator 的功能3

Go语言使用Buffer实现高性能处理字节和字符

《Go语言使用Buffer实现高性能处理字节和字符》在Go中,bytes.Buffer是一个非常高效的类型,用于处理字节数据的读写操作,本文将详细介绍一下如何使用Buffer实现高性能处理字节和... 目录1. bytes.Buffer 的基本用法1.1. 创建和初始化 Buffer1.2. 使用 Writ