JavaSE - 异常

目录

异常

[一. 常见的异常](#一. 常见的异常)

[1. 算数异常(ArithmeticException)](#1. 算数异常(ArithmeticException))

[2. 数组越界异常(ArrayIndexOutOfBoundException)](#2. 数组越界异常(ArrayIndexOutOfBoundException))

[3. 空指针异常(NullPointerException)](#3. 空指针异常(NullPointerException))

[4. 输入不匹配异常(InputMismatchException)](#4. 输入不匹配异常(InputMismatchException))

[5. 类型转换异常(ClassCastException)](#5. 类型转换异常(ClassCastException))

[二. 异常的分类](#二. 异常的分类)

[三. 异常的处理](#三. 异常的处理)

[1. 异常的捕获](#1. 异常的捕获)

[2. 异常的抛出](#2. 异常的抛出)

[3. 异常的声明](#3. 异常的声明)

[4. finally](#4. finally)

[四. 自定义异常类](#四. 自定义异常类)


异常

程序执行过程中发生的不正常行为称为异常

一. 常见的异常

1. 算数异常(ArithmeticException)

2. 数组越界异常(ArrayIndexOutOfBoundException)

3. 空指针异常(NullPointerException)

4. 输入不匹配异常(InputMismatchException)

5. 类型转换异常(ClassCastException)

二. 异常的分类

异常分为编译时异常(受查异常)和运行时异常(非受查异常)。

编译的时候 报的异常叫做编译时异常,在运行的时候报的异常叫做运行时异常。

  1. Error:错误。Java虚拟机无法解决的严重问题,比如:JVM的内部错误、资源耗尽等。典型代表: StackOverflowError和OutOfMemoryError,一旦发生回力乏术。必须由程序员自己解决。

  2. Exception:异常。分为编译时异常和运行时异常。

  3. 编译时出现的语法性错误不叫编译时异常,比如你单词拼错了。

  4. 编译时异常必须处理,否则程序无法通过编译。

三. 异常的处理

1. 异常的捕获

try-catch捕获并处理

java 复制代码
 try{
      可能出现异常的代码
            
 }catch (你要捕捉的异常){
      对捕捉到的异常进行处理
            
 }

try中放可能出现异常的代码,catch捕捉可能出现的异常然后进行处理。

异常被处理,程序可以继续执行后面代码。

异常如果不被捕捉处理,最终都会交给JVM处理,程序会异常终止。

2. 异常的抛出

上面捕获的异常都是程序编译或运行时,自己抛出的。

那么我们能不能通过代码,主动抛出异常?

java 复制代码
throw new xxxException("异常产生的原因");

主动抛出异常并处理了。如果不处理,程序就会异常终止,不会往下执行。

3. 异常的声明

当方法抛出编译时异常时,用户不想处理该异常,此时就可以借助throws将异常抛给方法的调用者来处理。即当前方法不处理异常,提醒方法的调用者处理异常。

java 复制代码
throws xxxException,xxxException

声明异常并不会处理异常,还是需要捕捉并处理的。如下:

确实声明了异常,但出现异常不处理还是会交给JVM,程序终止。

进行处理:

4. finally

程序无论发不发生异常 ,finally中的内容一定会被执行。一般用来放回收资源的一些代码。

try后面还可以跟小括号(),里面放用到的资源。作用:无论 try 块是正常结束还是异常结束,这个资源都会被自动关闭。

不需要写scanner.close()了。

四. 自定义异常类

自定义一个异常类,继承Exception默认就是编译时异常,继承RuntimeException就是运行时异常。如下图就是一个自定义异常:

相关推荐
。TAT。7 分钟前
C++ - 多态
开发语言·c++·学习·1024程序员节
武当豆豆24 分钟前
C++编程学习(第42天)
开发语言·c++·学习
eguid_11 小时前
【开源项目分享】JNSM1.2.0,支持批量管理的jar包安装成Windows服务可视化工具,基于Java实现的支持批量管理已经安装服务的可视化工具
java·开源·jar·1024程序员节·windows服务·jar包安装成服务·exe安装成服务
yong99901 小时前
基于MATLAB的内容图像检索实现
开发语言·matlab
歪歪1001 小时前
在C#中详细介绍一下Visual Studio中如何使用数据可视化工具
开发语言·前端·c#·visual studio code·visual studio·1024程序员节
jdlxx_dongfangxing2 小时前
C++ STL 容器与算法详解
开发语言·c++·1024程序员节
明道源码2 小时前
Kotlin 控制流、函数、Lambda、高阶函数
android·开发语言·kotlin
橙子199110162 小时前
在 Kotlin 中,ViewModel 的获取
开发语言·vue.js·kotlin
脚踏实地的大梦想家2 小时前
【Go】P8 Go 语言核心数据结构:深入解析切片 (Slice)
开发语言·数据结构·golang
hweiyu002 小时前
Gradle 构建脚本迁移:从 Groovy DSL 到 Kotlin DSL,语法与技巧对比
开发语言·kotlin·gradle