首页 > 编程语言 >JAVA异常处理

JAVA异常处理

时间:2023-03-19 21:55:45浏览次数:42  
标签:Exception JAVA 处理 try catch 异常

Java异常

简介: JAVA异常处理的目的是为保证程序在出错之后,依旧可以执行一些其它操做。该操作可以是用户的其它行为,也可以是保存程序运行后的一些结果,还可以是合理的结束程序的运行。

为了达到上述目的。异常处理应该具备以下几点

  1. 捕获异常
  2. 向用户通知出现的异常类型
  3. 保存出现异常前的程序运行结果
  4. 提供发生异常后的退出机制和处理机制

在JAVA中提供了一种处理异常的机制,该机制通过捕获异常,并把程序的控制权,从异常的发生地点转移到处理异常的程序代码处。这样,用户就编写对应的代码,来处理可能出现的异常,然后执行一些其它操作比如提示异常的原因,保存程序运行的结果或者正取的关闭程序。

异常分类

处理异常之前,需要知道发生异常的原因。如果不知道异常发生的原因而对异常进行处理,往往会出现更多的异常。比如异常发生的原因是数组越界,但处理的方式是关闭正常运行I/O流。这样就会导致程序的运行结果不正确,比如正在保存的文件丢失。

但发生异常的原因多如牛毛,列举出所有可能出现的异常原因显然是不太可能的,所以JAVA也只是抽象出了一些比较典型的异常情况来进行异常的分类,并通过面向对象的思想进行组织。

在JAVA中,所有的异常都继承自 Throwable 类,并在其下分出两个分支。分别是Error Exception

Error处理的唯一方式是尽最大努力保障程序的安全退出,是用户无法处理的异常。因为 Error的发生往往意味着,JAVA系统内部出错或者是计算机系统的资源耗尽。比如内存耗尽,栈溢出等错误。

Exception代表的分支是用户可以进行处理的异常,该Exception下面又分为两大类异常,分别是I/O异常(IOException)和运行时异常(RuntimeException)。

I/O异常往往出现的原因不一定是程序员编写的代码出现了问题,也可能是操作系统把某个I/O资源给移除了,导出出现了I/O异常。

但运行时异常(RuntimeException) 一定是代码编写中出现了问题,比如数组越界,除0操作,出现空指针、不正确的类型转换等异常情况。

我们可以通过这张图来了解JAVA中的异常层次结构。
image

代码中的异常处理

异常往往出现在执行的方法中,如果一个方法在调用的过程中,可能出现某种异常。那么应该在该方法的头部进行声明,表明该方法可能出现的异常的类型。以通知编译器,在调用该方法的时候,必须应对可能出现的问题。而使用该方法的用户就必须为该方法可能出现的异常进行捕获处理。声明异常的方式如下,如果我们定义了一个方法,该方法在运行的时候,不能接受0作为参数,那么我们就可以参数为0的时候,抛出异常。

public class Main {
    public static void main(String[] args) {
       
    }
}
class TestException{

    void show (int i) throws Exception {
        System.out.println("我是可能出现异常的代码段,如果i等于0,我就会异常");
        if (i == 0){
            throw new Exception("i=0,是错误的");
        }
    }

}

由于在方法头部声明了会出现异常,所以我在调用方法的时候,就必须使用try{}catch{}来捕获和处理异常,如下代码。

没使用try{}catch{},编译器报错。
image

使用try{}catch{}编译器没有报错
image

但我们传入的参数是0的时候,该代码就会出现异常,程序的控制权,就会从出现异常的地方转移到处理异常的地方。修改程序如下

public class Main {
    public static void main(String[] args) {
        TestException exception = new TestException();
        try {
            /**try代码块监视异常**/
            exception.show(1);
            System.out.println("方法成功执行完了。没有异常");
        }catch (Exception e){
            /**catch捕获出现的异常,并进行处理,该处理是打印异常消息**/
            System.out.println("我是处理异常的地方");
            e.printStackTrace();
        }

    }
}
class TestException{
    void show (int i) throws Exception {
        System.out.println("我是可能出现异常的代码段,如果i等于0,我就会异常");
        if (i == 0){
            throw new Exception("i=0,是错误的");

        }
        System.out.println("我在排除异常的后面");
    }
}

执行程序结果:
image

传入正常参数程序的处理结果
image

通过比较,可以得出。当方法抛出异常之后,那么该方法后面的所有代码将不会执行,并且在try语句块后面的代码也不会执行,
而是跳转到处理异常的 catch{}中执行。

标签:Exception,JAVA,处理,try,catch,异常
From: https://www.cnblogs.com/aoCat/p/17234483.html

相关文章

  • JAVA -01(简单知识介绍)
    JAVA-01前期准备介绍1972年C诞生【两大问题:指针;内存管理】1982年C++诞生【面向对象;兼容C;图形领域和游戏,但是更复杂】1995年JAVA诞生【没有指针没有内存管理;面向对象......
  • 打牢JavaScript 基础,看这篇
    原文链接:​   ​​https://note.noxussj.top/?source=51cto​​变量声明​在JavaScript程序中,使用一个变量之前应当先声明。变量是使用关键字 ​​var​​ 来声明的......
  • 图像处理之Canny边缘检测
    ​​​​1概述本节中,我们将一起学习OpenCV中边缘检测的各种算子和滤波器Canny算子、Sobel算子、Laplacian算子以及Scharr滤波器。2边缘检测的一般步骤在具体介绍之前,先来......
  • 你能说说Java深拷贝和浅拷贝区别吗
    引用拷贝创建一个指向对象的引用变量的拷贝。对象拷贝创建对象本身的一个副本。注:深拷贝和浅拷贝都是对象拷贝浅拷贝被复制对象的所有变量都含有与原来的对象相同......
  • Java实现简易酒店管理系统
    实现订房退房查房退出四个基本功能酒店有三楼,每楼5个房间,房间号按照101,102,...201,202·有双人间,单人间,地铺间能实现订房退房查房等基本功能在控制台中实现,操作便捷一......
  • Java NIO Socket学习
    前言这周学习尼恩编著的《Netty、Redis、ZooKeeper高并发实战》,这本书写的很不错,通过十几个例子带领大家去体会高并发如何实现,这周我看了最基础的JavaNOI部分,读书的时......
  • Java中的恍然大悟
    Java中的恍然大悟数组与集合最大的区别数组里既可以装8钟基本数据类型,还可以装包装类型。集合里只能装包装类型集合工具类给你封装了排序方法java.util.Collections......
  • 69.处理类型
    1.类型别名  随着程序越来越复杂,程序中用到的类型也越来越复杂,这种复杂性体现在两个方面。一是一些类型难于“拼写“,它们的名字既难记又容易写错,还无法明确体现其真实......
  • java文本获取
     使用正则方式提取文本中间内容获取文本中间(单次)参数1:文本参数2:文本前参数3:文本后返回一个StringpublicstaticStringgetSubString(Stringtext,Stringleft......
  • 【JavaScript】50_终篇_编程进阶与BOM编程概览(3k字+)
    12、节点的复制使用cloneNode()方法对节点进行复制时,它会复制节点的所有特点包括各种属性这个方法默认只会复制当前节点,而不会复制节点的子节点可以传递一个true作为参数,......