Java之异常

作者简介: zoro-1,目前大二,正在学习Java,数据结构等

作者主页: zoro-1的主页

欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖

Java之异常

认识异常

异常是指程序运行时发生的错误或意外情况,它可能导致程序无法继续执行或产生不正确的结果。在编程中,异常通常是由于输入数据错误、计算错误、系统故障或资源不足等原因引起的。程序员可以在代码中使用异常处理机制来捕获和处理这些异常,从而避免程序崩溃或产生不恰当的结果。常见的异常包括空指针异常、数组越界异常、算术异常等。

异常的体系结构


异常的处理

防御式处理

错误在代码中是客观存在的. 因此我们要让程序出现问题的时候及时通知程序猿. 主要的方式

1.事前防御型:

java 复制代码
boolean ret = false;

ret = 登陆游戏();

if (!ret) {
 处理登陆游戏错误;
    return;
}

ret = 开始匹配();

if (!ret) {
 处理匹配错误;
    return;
}

ret = 游戏确认();

if (!ret) {
 处理游戏确认错误;
    return;
}

ret = 选择英雄();

if (!ret) {
    处理选择英雄错误;
    return;
}

ret = 载入游戏画面();

if (!ret) {
 处理载入游戏错误;
    return;
}
......

2.事后处理型

java 复制代码
try {
    登陆游戏();
    开始匹配();
    游戏确认();
    选择英雄();
    载入游戏画面();
   ...
} catch (登陆游戏异常) {
    处理登陆游戏异常;
} catch (开始匹配异常) {
 处理开始匹配异常;
} catch (游戏确认异常) {
 处理游戏确认异常;
} catch (选择英雄异常) {
 处理选择英雄异常;
} catch (载入游戏画面异常) {
 处理载入游戏画面异常;
}

异常的抛出

在编写程序时,如果程序中出现错误,此时就需要将错误的信息告知给调用者,比如:参数检测。在Java中,可以借助throw关键字,抛出一个指定的异常对象,将错误信息告知给调用者。具体语法如下:

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

【需求】:实现一个获取数组中任意位置元素的方法。

java 复制代码
public static int getElement(int[] array, int index){
    if(null == array){
         throw new NullPointerException("传递的数组为null");
         }
        
    if(index < 0 || index >= array.length){
        throw new ArrayIndexOutOfBoundsException("传递的数组下标越界");
   }
    
    return array[index];
}
 

public static void main(String[] args) {
    int[] array = {1,2,3};
    getElement(array, 3);
}

异常的捕获及处理(try-catch-finally)

fianlly讲解

一般是用来关闭资源,为什么不在程序最后关闭资源呢,因为fianlly里语句一定会被执行且在return语句前,而程序最后之前的try语句如果return,那程序最后就不能关闭资源了,但fianlly语句中最好不要用return语句,因为try里面有return语句的话,fianlly里面就会执行,那try里面的return就没意义了

编译时异常(受查异常)

编译时异常是指在编译程序时就可以检测到的异常,也称为受检异常。如果程序中没有对这些异常进行处理,编译器会报错,无法编译通过

几个编译时异常:

  1. FileNotFoundException(文件未找到异常):在读取文件时,如果文件不存在,就会抛出该异常。

  2. IOException(输入输出异常):在进行输入输出操作时,如果操作失败,则会发生该异常。

  3. SQLException(SQL异常):在进行数据库操作时,如果SQL语句有误或者连接数据库失败,就会抛出该异常。

  4. ClassNotFoundException(类未找到异常):在加载类时,如果找不到指定的类,就会发生该异常。

这些异常都需要在代码中进行处理,否则编译器就会报错,无法编译通过。通常,我们会使用try-catch语句来捕获并处理这些异常。

运行时异常

运行时异常(RuntimeException)指的是在程序执行期间发生的异常,它们不需要在代码中显式地处理或声明。这些异常通常是由程序的错误逻辑或代码错误引起的,例如空指针异常(NullPointerException)、数组下标越界异常(ArrayIndexOutOfBoundsException)、算术异常(ArithmeticException)和类转换异常(ClassCastException)等。

下面给出几个例子:

  1. NullPointerException
java 复制代码
String str = null;
System.out.println(str.length());
  1. ArrayIndexOutOfBoundsException
java 复制代码
int[] arr = {1, 2, 3};
System.out.println(arr[3]);
  1. ArithmeticException
java 复制代码
int a = 10;
int b = 0;
System.out.println(a / b);
  1. ClassCastException
java 复制代码
Object obj = "hello";
Integer num = (Integer) obj;

自定义异常

继承Exception,必须要处理或声明

java 复制代码
public class Text8 {
    public static void main(String[] args) {
        try {
            throw new My_E("编译时自定义异常");
        } catch (My_E e) {

        }
    }
}
class My_E extends Exception{
   public My_E(String str){
       super(str);
   }

}

运行时异常

继承RuntimeException,不需要处理

java 复制代码
public class Text8 {
    public static void main(String[] args) {
            throw new My_Run("运行时自定义异常");
    }
}
class My_Run extends RuntimeException{
   public My_Run(String str){
       super(str);
   }

}

今天的分享到这就结束了,记得三连哦,谢谢大家支持

相关推荐
岑梓铭15 分钟前
考研408《计算机组成原理》复习笔记,第七章(1)——I/O接口
笔记·考研·408·计算机组成原理·计组
这周也會开心16 分钟前
云服务器安装JDK、Tomcat、MySQL
java·服务器·tomcat
hrrrrb1 小时前
【Spring Security】Spring Security 概念
java·数据库·spring
小信丶1 小时前
Spring 中解决 “Could not autowire. There is more than one bean of type“ 错误
java·spring
周杰伦_Jay2 小时前
【Java虚拟机(JVM)全面解析】从原理到面试实战、JVM故障处理、类加载、内存区域、垃圾回收
java·jvm
摇滚侠3 小时前
Spring Boot 3零基础教程,IOC容器中组件的注册,笔记08
spring boot·笔记·后端
bnsarocket5 小时前
Verilog和FPGA的自学笔记2——点亮LED
笔记·fpga开发·verilog·自学
程序员小凯6 小时前
Spring Boot测试框架详解
java·spring boot·后端
豐儀麟阁贵6 小时前
基本数据类型
java·算法
_extraordinary_6 小时前
Java SpringMVC(二) --- 响应,综合性练习
java·开发语言