Java中的异常

Java异常的体系结构

Java中的异常
根类Throwable,其子类Error和Excepion

Excepion分为运行时异常RuntimeException(也叫非检查型异常),和编译时Exception异常(也叫检查型异常)。编译时异常必须处理,而运行时异常可以不处理。
运行时异常可以不处理,但是程序运行时发生此异常就会报错
编译时异常必须处理,比如说语法错误,不处理就不能编译
处理异常的方式,try-catch-finally或者throws
throw和throws的区别
还有如何自定义异常

  • 当try catch finally中都有return语句时,finally中的return语句会覆盖前面的,也就是前面的return失效
  • 当try catch 中都有return语句时,看程序执行完try;还是说try块中发现了异常,执行到catch代码块中的return,然后存储该代码块中return语句中的值,等finally代码块执行完毕后再将return语句中的返回值进行返回。

  • 子类重写父类方法,方法抛出的异常类型不能大于父类被重写的方法,理由如下


class Fu{
    public void run() throws IOException {

    }
}

class Zi extends Fu{
    @Override
    public void run() throws Exception{//这里写法错的,只是演示

    }
}

class TestWhyCantBig{
    /**
     * 该类的构造方法传入的参数是Fu这个类
     * 然后在 testMethod 方法中调用了fu的run()方法,并且捕获这个方法抛出的异常
     * 如果传入的是Fu子类的对象,且该子类重写父类方法时,抛出的异常类型大于父类方法的类型。那么下面这个方法就不能捕获到子类方法的异常了
     * 逻辑有问题,所以不允许这样
     */
    private Fu fu;

    public TestWhyCantBig(Fu fu) {
        this.fu = fu;
    }

    public void testMethod(){
        try {
            fu.run();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

}
  • 子类重写父类的方法,方法的权限修饰符应该不小于父类被重写的方法
class Fu{
    void run() throws IOException {

    }
}

private class Zi extends Fu{ //这里private写法错的,只是演示
    @Override
    private void run() throws IOException{

    }
}
/**
如果说子类方法权限修饰符比父类小
根据多态,父类的引用指向子类的对象,那么此时下面的例子则无法调用z的run方法
**/

class TestWhyCantBig{

    public static void main(String[] args) {
        Fu z = new Zi();
        try {
            z.run();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

}

@SneakyThrows

这个注解可以用在方法上面,它会将方法中要处理的异常自动转换成运行时异常,也可以理解成它会把代码块用 try-catch 包起来。

Original: https://www.cnblogs.com/pzistart/p/16730615.html
Author: pzistart
Title: Java中的异常

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/616005/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Github上传代码慢

    设置git全局代理 查看代理 git config –global http.proxy git config –global https.proxy 如果你想让clone命令…

    Java 2023年6月16日
    079
  • 自定义注解获取当前登录用户

    在做项目的时候,我们经常会用到当前登录的用户,获取这个用户相关的信息,总是用User user = session.getAttribute(“user”)…

    Java 2023年6月16日
    0153
  • 【spring源码学习】spring的事务管理源码学习

    一、抽象概念 1、事务管理器 接口:org.springframework.transaction.PlatformTransactionManager 实现类:org.sprin…

    Java 2023年5月29日
    070
  • List的同步类比较

    TL;NRs CopyOnWriteArrayList类在多线程顺序读取上有很大的优势,但在随机读取上反而有较大的劣势,且在写入方面性能极差。 Vector类在顺序读取方面性能较差…

    Java 2023年6月9日
    078
  • 个人springboot配置项

    update user set u_name="lisi"​ 应用名称 spring.application.name=auction_java 应用服务 WE…

    Java 2023年6月7日
    088
  • Tomcat 单机多实例使用记录

    参考资料 CATALINA_HOME 属性 VS CATALINA_BASE 属性 步骤 1. 创建 CATALINA_BASE 使用的目录 2. 拷贝配置文件添加hello应用 …

    Java 2023年6月13日
    085
  • 解决eclipse中的Java文件,使用idea打开的乱码问题

    转码前: 转码后: 核心方法: new String(content, "GBK").getBytes("utf-8")); 吐槽: 在克隆…

    Java 2023年6月6日
    086
  • Java集合

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Java 2023年6月7日
    077
  • Spring Security OAuth 笔记

    1 单点登录 关于单点登录的原理,我觉得下面这位老哥讲的比较清楚,有兴趣可以看一下,下面我把其中的重点在此做个笔记总结 https://juejin.cn/post/6844904…

    Java 2023年6月7日
    076
  • 【JDK】分析 String str=““ 与 new String()

    一、基础概念 为了讲清楚他们的差异,这里先介绍几个概念。 1.1 常量池 所谓常量池:顾名思义就是用来存放一些常量的。该常量是在 编译期被确定,并被保存在已编译的 .class文件…

    Java 2023年6月5日
    0101
  • synchronized锁及其锁升级

    点赞再看,养成习惯,微信搜索「 小大白日志」关注这个搬砖人。 文章不定期同步公众号,还有各种一线大厂面试原题、我的学习系列笔记。 多线程加锁有两种方式 利用Sychronized关…

    Java 2023年6月8日
    084
  • WPF开发的实用桌面管理小工具 —- 系列文章

    前言 看最近比较冷清,我来暖暖场。 点击链接加入群聊 【update】 1、新增托盘。 2、新增换肤。 3、透明度切换。 环境 Visual Studio 2019,dotNet …

    Java 2023年5月30日
    077
  • 进程外Session

    1、Session保存在SQLServer中配置方法: 1)运行.NetFramework安装目录下对应版本的aspnet_regsql.exe 来创建相关的数据库、表和存储过程等…

    Java 2023年5月30日
    058
  • Java生产者消费者问题

    2.用BlockingQueue会自动处理生产者消费者问题 3.两个线程打印奇偶数 Original: https://www.cnblogs.com/shamgod/p/5461…

    Java 2023年5月29日
    0102
  • java如何对接企业微信

    前言 最近实现社群对接企业微信,对接的过程遇到一些点,在此记录。 企业微信介绍 企业微信具有和微信一样的体验,用于企业内部成员和外部客户的管理,可以由此构建出社群生态。企业微信提供…

    Java 2023年5月29日
    0128
  • mongodb 数据块迁移的源码分析

    简介 上一篇我们聊到了mongodb数据块的基本概念,和数据块迁移的主要流程(详见mongodb数据块的迁移流程介绍),这篇文章我们聊聊源码实现部分。 迁移序列图 数据块迁移的请求…

    Java 2023年6月6日
    076
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球