17、Java异常机制

DDR核心机制解析:从Burst到Prefetch的性能跃迁 本文深入解析了DDR内存性能跃迁的核心机制,重点阐述了Burst(突发传输)与Prefetch(预取)技术的协同工作原理。Burst机制通过连续传输数据减少访问延迟,而Prefetch则通过内部预取数据提升吞吐量,两者结合完美匹配现代CPU缓存行需求,是DDR3等内存实现高效带宽的关键。 阅读详情

一、什么是异常

  1. 实际工作中,遇到的情况不可能是非常完美的。比如:你写的某个模块,用户输入不一定符合你的要求、你的程序要打开某个文件,这个文件可能不存在或者文件格式不对,你要读取数据库的数据,数据可能是空的等。我们的程序跑着,内存或硬盘可能满了等等。
  2. 软件程序在运行过程中,非常可能遇到刚刚提到的这些异常问题,我们叫异常Exception,意思是例外。这些例外情况,或者叫异常,怎么让我们写的程序做出合理的处理,而不至于程序崩溃。
  3. 异常指程序运行中出现的不期而至的各种状况,如:文件找不到、网络连接失败、非法参数等。
  4. 异常发生在程序运行期间,它影响了正常的程序执行流程。

二、简单分类

  1. 要理解Java异常处理是如何工作的,你需要掌握以下三种类型的异常:
    • 检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存在文件时,一个异常就发生了,这些异常在编译时不能被简单地忽略。
    • 运行时异常:运行时异常是可能被程序员避免的异常。与检查性异常相反,运行时异常可以在编译时被忽略。
    • 错误Error:错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略。例如,当栈溢出时,一个错误就发生了,它们在编译也检查不到的。

三、异常体系结构

  1. Java把异常当作对象来处理,并定义一个基类java.lang.Throwable作为所有异常的超类。

  2. 在Java API中已经定义了许多异常类,这些异常类分为两大类,错误Error和异常Exception。

在这里插入图片描述

  1. Error

    • Error类对象由Java虚拟机生成并抛出,大多数错误与代码编写者所执行的操作无关。
    • Java虚拟机运行错误(Virtual MachineError),当JVM不再有继续执行操作所需的内存资源时,将出现OutOfMemoryError。这些异常发生时,Java虚拟机(JVM)一般会选择线程终止;
    • 还有发生在虚拟机试图执行应用时,如类定义错误(NoClassDefFoundError)、链接错误(LinkageError)。这些错误是不可查的,因为它们在应用程序的控制和处理能力之外,而且绝大多数是程序运行时不允许出现的状况。
  2. Exception

    • 在Exception分支中有一个重要的子类RuntimeException (运行时异常),这些异常是不检查异常,程序中可以选择捕获处理, 也可以不处理。
      • ArraylndexOutOfBoundsException (数组下标越界)
      • NullPointerException (空指针异常)
      • ArithmeticException (算术异常)
      • MissingResourceException (丢失资源)
      • ClassNotFoundException (找不到类)等异常
    • 这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生;
  3. Error和Exception的区别:

    • Error通常是灾难性的致命的错误,是程序无法控制和处理的,当出现这些异常时,Java虚拟机(JVM)一般会选择终止线程;
    • Exception通常情况下是可以被程序处理的,并且在程序中应该尽可能的去处理这些异常。
  4. 举个栗子:

    public class Demo01 {
        public static void main(String[] args) {
            new Demo01().a(); //Error
            System.out.println(11/0); //Exception
        }
        public void a(){
            b();
        }
    
        private void b() {
            a();
        }
    }
    

四、捕获和抛出异常

  1. 关键字:try、catch、finally、throw、throws。

  2. 示例:

    public static void main(String[] args) {
        int a = 1;
        int b = 0;
    
        try{ //try监控区域
            System.out.println(a/b);
        }catch (ArithmeticException e){ //catch(异常类型)捕获异常
            System.out.println("程序出现异常,变量b不能为0");
        }finally { //finally处理善后工作
            System.out.println("finally");
        }
    
        //假设要捕获多个异常,要从小到大!否则会报错!
        try{ //try监控区域
            new Test().a();
        }catch (Error e){ //catch(异常类型)捕获异常
            System.out.println("Error");
        }catch (Exception e){
            System.out.println("Exception");
        }catch (Throwable t){
            System.out.println("Throwable");
        }finally{ //finally处理善后工作
            System.out.println("finally");
        }
    
        //可以使得程序能够继续往下运行
        try {
            new Test().test(1,0);
        } catch (ArithmeticException e) {
            e.printStackTrace();
        }
    	System.out.println("1111111111111111111");
    }
    
    public void a() {
        b();
    }
    
    private void b() {
        a();
    }
    
    //假设这个方法中处理不了这个异常,就从方法上抛出异常
    public void test(int a, int b) throws ArithmeticException{
        if(b==0){ //throw throws
            throw new ArithmeticException(); //主动抛出异常
        }
        System.out.println(a/b);
    }
    
    public static void main(String[] args) {
        int a = 1;
        int b = 0;
    
        //快捷键:Ctrl + Alt + T
        try {
            System.out.println(a/b);
        } catch (Exception e) {
            //System.exit(1);
            e.printStackTrace(); //打印错误的栈信息
        } finally {
            ;
        }
    }
    

五、自定义异常

  1. 使用Java内置的异常类可以描述在编程时出现的大部分异常情况。除此之外,用户还可以自定义异常。用户自定义异常类,只需继承Exception类即可。

  2. 在程序中使用自定义异常类,大体可分为以下几个步骤:

    • 创建自定义异常类;
    • 在方法中通过throw关键字抛出异常对象;
    • 如果在当前抛出异常的方法中处理异常,可以使用try-catch语句捕获并处理;否则在方法的声明处通过throws关键字指明要抛出给方法调用者的异常,继续进行下一步操作;
    • 在出现异常方法的调用者中捕获并处理异常。
  3. 示例:

    //自定义异常类
    public class MyException extends Exception{
        //传递数字>10,抛出异常
        private int detail;
    
        public MyException(int a){
            this.detail = a;
        }
    
        //toString:异常的打印信息
        @Override
        public String toString() {
            return "MyException{" + detail + '}';
        }
    }
    
    public class Test {
        //可能会存在异常的方法
        static void test(int a ) throws MyException{
            System.out.println("传递的参数为:" + a);
            if(a>10){
                throw new MyException(a); //抛出
            }
            System.out.println("OK");
        }
    
        public static void main(String[] args) {
            try {
                test(11);
            } catch (MyException e) {
                System.out.println("MyException => " + e);
                //e.printStackTrace();
            }
        }
    }
    

六、实际应用中的经验总结

  1. 处理运行时异常时,采用逻辑去合理规避同时辅助try-catch处理
  2. 在多重catch块后面,可以加一个大的异常,如:catch (Exception),来处理可能会被遗漏的异常
  3. 对于不确定的代码,也可以加上try-catch,处理潜在的异常
  4. 尽量去处理异常,切忌只是简单地调用printStackTrace()去打印输出
  5. 具体如何处理异常,要根据不同的业务需求和异常类型去决定
  6. 尽量添加finally语句块去释放占用的资源
从零开始讲DDR(7)——modelsim独立仿真DDR4 本文主要内容为DDR4 MIG ip核仿真,modelsim独立仿真DDR4。在进行DDR仿真的时候,我们会面临一个以往常规仿真不存在的问题:DDR本身并不是一个我们通过RTL代码设计出来的部件,常规的模块或者IP仿真,都是基于RTL代码就能进行的,但是回顾一下我们DDR的开发流程,调用的IP核也只是MIG ip,其本质是一个DDRC+DDRPYH的组合,并不能模拟任何DDR本身的行为,因此,在进行仿真之前,我们首先要做的就是获取DDR的仿真模型。 阅读详情

相关推荐

深入浅出DDR系列(二)--DDR工作原理

学习完了DDR的基本组成和硬件结构原理之后,从整体上了解了DDR的特性和静态图,包括原理、管脚图等。那么本章就要从动态的角度来分析时序结构,包括read/write的整个过程到数据返回发生了什么,其中包括以下内容 DDR是如何完成Read、Write 等的操作 DDR的基本命令 DDR的时序参数 DDR的性能分析 1. DRAM基本组成 对于DRAM,其主要由行和列组成,每一个bit中都是由类似右下图的类晶体管的结构组成,对于sdram的数据,可以通过控制column和row就可以访问sd

奇小葩 3万+

Java 异常处理机制(全)

Java异常处理与异常体系结构

qq_48010634的博客 7325

解决用VScode写中文注释,Vivado打开之后是乱码的方法

这样就解决了中文注释乱码的问题,此外如果使用notepad++写verilog代码的话直接在notepad++上面将编码格式改为ANSI格式即可,更加方便快捷,所以此方法仅针对习惯用VScode写Verilog的同学,如果有其他好办法的话欢迎评论区补充。首先,VScode中的中文默认编码格式是UTF-8,然后Vivado的编码格式是vivado 默认的应该是ANSI编码格式,刚开始我先按照网上说明的,将VScode中的编码格式改为GBK格式(点击右下角->点击通过编码保存)。

weixin_50573305的博客 5809

Java异常的处理机制

finally块必定会被执行,通常用于释放资源或进行清理工作。除了Java提供的异常类之外,我们还可以自定义异常类来表示特定的异常情况。在Java中,可以通过创建自定义的类来定义自己的异常。自定义异常类通常需要继承自Java提供的异常类(如Exception或RuntimeException)或它们的子类。// 自定义异常类 public class MyException extends Exception {

qq_39939541的博客 2804

英飞凌TLF35584 SBC实战:手把手教你配置WDG看门狗与ERR监控(基于AUTOSAR架构)

本文详细介绍了基于AUTOSAR架构的英飞凌TLF35584 SBC芯片WDG看门狗与ERR监控功能的配置方法。通过硬件平台搭建、寄存器级配置、AUTOSAR模块集成及诊断策略优化,帮助开发者快速掌握关键配置技巧,提升嵌入式系统的安全性和可靠性。

weixin_30256901的博客 474

管道机器人手臂机械结构设计cad【8张】+三维图+设计说明书+绛重

履带式管道机器人适用于各种管道环境,包括直管道、弯曲管道、水平管道、垂直管道等,其灵活性和适应性使得它可以应对不同形状和尺寸的管道,完成全面的检测和维护工作。管道机器人研究具有重要的现实意义和深远的社会影响,通过提高工作效率、降低人员风险、提升服务质量、节约成本资源和促进科技创新等方面的作用,为现代工程技术领域的发展和进步做出了积极的贡献。管道机器人是一种能够在管道内部执行各种任务的智能机器人,而管道机器人的机械臂对于管道机器人在管道内执行任务的灵活性、稳定性和效率至关重要。

kejigongjiang的博客 943

Java异常处理机制全网最详细总结(小白也能理解)

Java异常处理机制全网最详细总结(小白也可以轻松理解)

m0_51358164的博客 4392

k最近邻算法——电影分类及案例详解

如图3-7所示,若将国际象棋棋盘放在二维直角坐标系中,格子的边长定义为1,坐标的x轴及y轴和棋盘方格平行,原点恰落在某一格的中心点,则王从一个位置走到其他位置需要的步数恰为二个位置的切比雪夫距离,因此切比雪夫距离也称为棋盘距离。关于这里的距离度量,这个电影分类的例子有2个特征,也就是2维的,可以使用我们高中学过的两点距离公式(两点距离公式其实就是欧氏距离在二维空间上的公式,也就是欧氏距离n的值为2的情况,欧氏距离也称为欧几里德距离)来计算距离,如图3-3所示。对数据进行归一化,避免量纲对计算距离的影响。

ZhShy 4553

java的异常体系

1.运行时异常(逻辑方面)都是RuntimeException类及其子类异常,如NullPointerException、IndexOutOfBoundsException等,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。2.其中异常类Exception又分为运行时异常(RuntimeException)和非运行时异常, 这两种异常有很大的区别,也称之为不检查异常(Unchecked Exception)和检查异常(Checked Exception)

qq_52988841的博客 294

Joule 终于会说 ABAP 了:从 ADT 提效到 ABAP AI SDK + ISLM 自建企业级 AI 场景的落地路线

生成结构化摘要(故障现象、初步原因、处理动作、备件消耗)自动给出建议分类(电气、机械、软件、网络)把摘要回写到工单抬头,方便后续统计与知识沉淀如果你用 CAP 来做这类服务,通常会在 Node.js 层封装一个对 AI Hub 的调用,再通过 OData 或 Event 把结果写回 SAP。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 342

恶劣天气下的分割鲁棒性:雨雪雾干扰消除

恶劣天气下的分割鲁棒性:雨雪雾干扰消除​ ,人工智能,计算机视觉,大模型,AI,本文围绕恶劣天气下语义分割鲁棒性及雨雪雾干扰消除展开,分析了雨雪雾对图像和分割任务的影响,介绍了基于图像增强、深度学习等现有解决方法,以及针对不同干扰的具体方案,还探讨了提高分割鲁棒性的策略、实验评估情况,指出当前面临复杂天气、数据缺乏、实时性等挑战,并展望了端到端模型、无监督学习等未来发展趋势,为该领域研究提供了全面参考。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 17万+

异常机制以及自定义异常

异常分类(异常—>Exception) 检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。 例如要打开一个不存在的文件时,一个异常就发生了,这些异常在编译时不能被简单地忽略。 运行时异常:运行时异常是可能被程序员避免的异常。与检查性异常相反,运行时异常可以在编译时被忽略。 错误ERROR:错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略。例如,当栈溢出时,一个错误就发生了,它们在编译也检查不到的。 异常体系结构 Error Erro

weixin_46649583的博客 1904

元数据治理实战:构建企业数据地图与血缘体系

元数据(Metadata)是描述数据的数据,是你能了解“数据是怎么来的”、“它是做什么的”、“能不能用”的基础信息。📌 举个例子:order_idstringods_order定义:平台内用户在订单系统中产生的唯一订单编号更新时间:每天凌晨 2 点,由 Airflow 调度任务生成所属人:张三(数据开发部)🔍 这些信息本身不直接参与计算,但它们是数据可管理、可追踪、可评估的基础。模块实战建议元数据类型技术 + 业务 + 操作元数据三类统一治理治理路径。

晴天彩虹雨的博客 290

Java 学习 day17: 异常机制

​​​​​​​

whosedad的博客 1672

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

java学习第17天--异常机制和File类

Throwable 是所有异常的父类,类似Object。 非检测类异常就是编译阶段不会报错,运行时报错。检测类在编译阶段便报错。 避免异常用if判断,代码太长可以用tryCatch捕获。 catch到就执行catch代码块,finally块 始终执行。 异常的抛出用throws抛出,谁调用谁处理,main中再抛出是抛给JVM虚拟机,不建议。 自定义xxxException异常类继承Exception类或者其子类。提供两个版本的构造方法,一个是无参构造方法,另外一个是字符串作为参数的构造方法。 //笔试考.

lusiyang463的博客 179

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Day15_16_17——Lambda表达式、File类、IO流、Java异常处理机制

Day15_16_17——Lambda表达式、File类、IO流、Java异常处理机制

MF956的博客 787

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Java学习日记17(SpringMVC异常处理机制)

SpringMVC异常处理机制的学习

weausS的博客 271

7-2 jmu-Java-06异常-02-使用异常机制处理异常输入 (50 分)计算机17-1,2 异常

7-2 jmu-Java-06异常-02-使用异常机制处理异常输入 (50 分) 使用异常处理输入机制,让程序变得更健壮。 main方法: 输入n,创建大小为n的int数组。 输入n个整数,放入数组。输入时,有可能输入的是非整型字符串,这时候需要输出异常信息,然后重新输入。 使用Arrays.toString输出数组中的内容。 输入样例: 5 1 2 a b 4 5 3 输出样例...

markconca的博客 7467

2022.01.17_Java学习总结_常用API、异常机制_BigInteger、Math、Error、Exception

1. BigInteger 1.1 概述 1、Integer类作为int的包装类,能存储的最大整型值为231-1,Long类也是有限的, 最大为263-1。如果要表示再大的整数,不管是基本数据类型还是他们的包装类 都无能为力,更不用说进行运算了。 2、java.math包的BigInteger可以表示不可变的任意精度的整数。BigInteger 提供 所有 Java 的基本整数操作符的对应物,并提供 java.lang.Math 的所有相关方法。 另外,BigInteger 还提供以下运算:模算术、GCD

m0_46552030的博客 401

自学Java第17天:异常与多线程:异常、线程实现方式、线程同步机制、等待唤醒机制、线程池、Lambda表达式

一、异常 1、异常概念&异常体系 2、异常分类 3、异常的产生过程解析 4、throw关键字 5、Object非空判断-requireNonNul 6、throws关键字-异常处理的第一种方式 7、try- catch异常处理的第二种方式 8、Throwable类中3个异常处理的方法 9、finally代码块 10、异常处理注意事项- 多异常的捕获处理 11、异常处理注意事项-finally有return语句 12、异常处理注意事项-子父类异常 13、自定义异常类 1

lhw19960418的博客 286

Java异常集合

常见的异常及其原因: 1、java.lang.NullpointerException(空指针异常) 原因:这个异常经常遇到,异常的原因是程序中有空指针,即程序中调用了未经初始化的对象或者是不存在的对象。 经常出现在创建对象,调用数组这些代码中,比如对象未经初始化,或者图片创建时的路径错误等等。对数组代码 中出现空指针,是把数组的初始化和数组元素的初始化搞混淆了。数组的初始化是...

Pagegle的博客 642

从JVM视角看Java异常:一次异常抛出,底层到底发生了什么?(JDK 17为例)

本文深入探讨了Java异常处理的底层机制,从JVM视角解析了异常抛出时的字节码指令、异常表结构、栈帧展开流程以及finally块的实现原理。以JDK 17为例,详细介绍了现代JVM在异常处理方面的性能优化技术,并提供了实用的调试技巧和最佳实践,帮助开发者更好地理解和优化Java异常处理。

weixin_30326741的博客 427

Java异常处理:try-catch-finally和自定义异常实战

/ 生成标准化错误响应。

微风不留尘 1100

Java SE 笔记(扩展篇)JDK 9-17 新特性介绍

Java9-17新特性

qq_25928447的博客 2794

基于异常处理机制的专项实验

执行流程: try 执行核心逻辑, catch 捕获匹配异常, finally 无论是否异常都会执行(除非 System.exit(0) )。3. 异常信息需具体:避免抛出 new Exception("错误") ,应包含上下文(如 "查询用户ID:" + id + " 不存在" );- 异常体系:顶层类 Throwable ,子类分为 Error (系统错误,无需捕获)和 Exception (程序异常,可处理);// 若打开注释,最终返回3(finally返回值覆盖catch)

yn_xy的博客 564

java 8-17 新特性(学习留存,欢迎交流)

介绍了java8-17的一些新特性

qq_72250569的博客 846
上一篇: 16、Java面向对象
下一篇: 如何将LaTeX公式拷贝到Word中
coder_lcw
博客等级 码龄7年 22粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值