当前位置: 首页 > news >正文

JAVA中的异常:异常的分类+异常的处理

文章目录

    • 1. 异常的分类
      • 1.1 Error
      • 1.2 Exception
        • 1.2.1 运行时异常
        • 1.2.2 非运行时异常
    • 2.异常的处理
      • 2.1 try catch用法
      • 2.2 throws和throw的区别

1. 异常的分类

Throwable类(表示可抛)是所有异常和错误的超类,两个直接子类为Error和Exception分别表示错误和异常

其中异常类Exception又分为运行时异常和非运行时异常,这两个异常有很大区别,运行时异常也叫非受检异常,非运行时异常也叫受检异常
在这里插入图片描述

1.1 Error

Error是程序无法处理的错误,它是由JVM产生和抛出的,比如OutoMemoryError、ThreadDeath等,这些异常发生时,一般会选择线程终止

1.2 Exception

Exception是程序本身可以处理的异常,对于这类异常,程序应当尽可能去处理

1.2.1 运行时异常

运行时异常都是RuntimeException类以及它的子类异常,比如NullPointerException(空指针)、ArrayIndexOutOfBoundsException(数组越界异常)等,这些异常也是不检查异常,程序可以选择处理,也可以选择不处理,这类异常一般由程序逻辑错误引起,程序应该从逻辑角度尽可能避免这类异常的发生

1.2.2 非运行时异常

非运行时异常都是除RuntimeException类以及它的子类异常之外的异常,这些类都属于Exception类,都是要接受检查的异常,比如IOException、SQLException,从程序语法角度看这类异常是必须要进行处理的异常,如果不处理,程序就不能编译通过

2.异常的处理

  • try catch处理方式

    如果try代码块中的代码运行出现错误,那么catch代码块中的代码执行,但不影响后面代码运行

  • throws处理方式

    向外抛出异常,让之后一个接收到该异常的方法去处理

2.1 try catch用法

package 异常;
/** 使用try catch* * * */
public class Test {public static void main(String[] args) {// TODO Auto-generated method stubint[] arr = new int[5];try {for(int i = 0; i < 10; i++) {arr[i] = i;}}catch(Exception e) {  //这个位置可以利用多态,使用更大的类System.out.println("数组不赋值");}System.out.println("-----------------");		}}
try{可能出现问题的代码
}catch(异常类型){当产生对应异常类型时,会执行catch中代码
}finally{无论如何都会执行的代码
}
  • try、catch、finally三个语句不能单独使用,可以组成try…catch,try…finally、try…catch…finally,其中catch可以有多个,finally最多有一个
  • try、catch、finally三个代码块中变量的作用域为代码内部,分别独立不能互相访问,如果在三个块中使用,需要把变量定义到这些块之外
  • 多个catch块,最多只会匹配其中一个异常类且只会执行该catch块代码,而不会在执行其他catch块代码,且匹配catch语句的顺序是从上到下,也可能所有的catch块都不执行
  • 先写catch子类异常,再写catch父类异常
  • finally语句是无论try中有没有发生异常,都会执行的语句块,一般finally是程序提供的一个统一的出口,保证程序转到其他部分继续执行,finally通常做一些清除工作,如关闭文件,关闭资源等

2.2 throws和throw的区别

  • throws用来声明一个方法可能产生的所有异常,不做任何处理而是将异常往上传递,谁调用找谁处理

    • 用在方法声明后面,跟的是异常类名
    • 可以跟多个异常类名,用逗号隔开
    • 表示抛出异常,由该方法的调用者处理
    • throws表示出现异常的一种可能性,并不一定会发生这些异常
  • throws用来抛出一个具体的异常对象

    • 用在方法体内,跟的是异常对象
    • 只能抛出一个异常对象
    • 表示抛出异常,由方法内的语句处理
    • throws抛出异常的一定有的异常,所以需要必须处理

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 好用的电脑屏幕监控软件推荐,什么软件能够监控电脑?
  • python-NLP:1中文分词
  • Android中Intent和IntentFilter
  • PCB焊盘设计有哪些标准?对板厂生产有何影响?
  • Modbus转BACnet/IP网关BA100-配硬件说明
  • 基于dcm4chee搭建的PACS系统讲解(一)docker搭建精简版
  • C#与C++交互开发系列(三):深入探讨P/Invoke基础知识
  • 大模型额外篇章三:vercel搭建openai中转服务器
  • sql注入前期准备(相关函数和原理)
  • 使用sqlalchemy查询mysql的JSON字段
  • 【体外诊断】ARM/X86+FPGA嵌入式计算机在免疫分析设备中的应用
  • 探索Perl的图形用户界面开发:工具、技巧与实践
  • 最新全新UI异次元荔枝V4.4自动发卡系统源码
  • Python 实现PDF和TIFF图像之间的相互转换
  • SpringBoot整合Elastic-Job 2.1.53版本任务调度,手动任务,动态添加任务演示
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • es6
  • ES6 ...操作符
  • iOS小技巧之UIImagePickerController实现头像选择
  • Java读取Properties文件的六种方法
  • Java新版本的开发已正式进入轨道,版本号18.3
  • node 版本过低
  • nodejs实现webservice问题总结
  • React Native移动开发实战-3-实现页面间的数据传递
  • Spring声明式事务管理之一:五大属性分析
  • 工作手记之html2canvas使用概述
  • 汉诺塔算法
  • 和 || 运算
  • 排序算法之--选择排序
  • const的用法,特别是用在函数前面与后面的区别
  • python最赚钱的4个方向,你最心动的是哪个?
  • ​【数据结构与算法】冒泡排序:简单易懂的排序算法解析
  • #ubuntu# #git# repository git config --global --add safe.directory
  • #传输# #传输数据判断#
  • #进阶:轻量级ORM框架Dapper的使用教程与原理详解
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • (1)SpringCloud 整合Python
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (14)Hive调优——合并小文件
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (arch)linux 转换文件编码格式
  • (JS基础)String 类型
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (搬运以学习)flask 上下文的实现
  • (二)fiber的基本认识
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (五)关系数据库标准语言SQL
  • (一)UDP基本编程步骤
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)
  • (转)eclipse内存溢出设置 -Xms212m -Xmx804m -XX:PermSize=250M -XX:MaxPermSize=356m
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • (自用)learnOpenGL学习总结-高级OpenGL-抗锯齿