作者简介: zoro-1,目前大二,正在学习Java,数据结构等
作者主页: zoro-1的主页
欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖
Java之异常
认识异常
异常是指程序运行时发生的错误或意外情况,它可能导致程序无法继续执行或产生不正确的结果。在编程中,异常通常是由于输入数据错误、计算错误、系统故障或资源不足等原因引起的。程序员可以在代码中使用异常处理机制来捕获和处理这些异常,从而避免程序崩溃或产生不恰当的结果。常见的异常包括空指针异常、数组越界异常、算术异常等。
异常的体系结构
异常的处理
防御式处理
错误在代码中是客观存在的. 因此我们要让程序出现问题的时候及时通知程序猿. 主要的方式
1.事前防御型:
boolean ret = false;ret = 登陆游戏();if (!ret) { 处理登陆游戏错误; return;}ret = 开始匹配();if (!ret) { 处理匹配错误; return;}ret = 游戏确认();if (!ret) { 处理游戏确认错误; return;}ret = 选择英雄();if (!ret) { 处理选择英雄错误; return;}ret = 载入游戏画面();if (!ret) { 处理载入游戏错误; return;}......
事后处理型
try { 登陆游戏(); 开始匹配(); 游戏确认(); 选择英雄(); 载入游戏画面(); ...} catch (登陆游戏异常) { 处理登陆游戏异常;} catch (开始匹配异常) { 处理开始匹配异常;} catch (游戏确认异常) { 处理游戏确认异常;} catch (选择英雄异常) { 处理选择英雄异常;} catch (载入游戏画面异常) { 处理载入游戏画面异常;}
异常的抛出
在编写程序时,如果程序中出现错误,此时就需要将错误的信息告知给调用者,比如:参数检测。在Java中,可以借助throw关键字,抛出一个指定的异常对象,将错误信息告知给调用者。具体语法如下:
throw new XXXException("异常产生的原因");
【需求】:实现一个获取数组中任意位置元素的方法。
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就没意义了
编译时异常(受查异常)
编译时异常是指在编译程序时就可以检测到的异常,也称为受检异常。如果程序中没有对这些异常进行处理,编译器会报错,无法编译通过。
几个编译时异常:
-
FileNotFoundException(文件未找到异常):在读取文件时,如果文件不存在,就会抛出该异常。
-
IOException(输入输出异常):在进行输入输出操作时,如果操作失败,则会发生该异常。
-
SQLException(SQL异常):在进行数据库操作时,如果SQL语句有误或者连接数据库失败,就会抛出该异常。
-
ClassNotFoundException(类未找到异常):在加载类时,如果找不到指定的类,就会发生该异常。
这些异常都需要在代码中进行处理,否则编译器就会报错,无法编译通过。通常,我们会使用try-catch语句来捕获并处理这些异常。
运行时异常
运行时异常(RuntimeException)指的是在程序执行期间发生的异常,它们不需要在代码中显式地处理或声明。这些异常通常是由程序的错误逻辑或代码错误引起的,例如空指针异常(NullPointerException)、数组下标越界异常(ArrayIndexOutOfBoundsException)、算术异常(ArithmeticException)和类转换异常(ClassCastException)等。
下面给出几个例子:
- NullPointerException
String str = null;System.out.println(str.length());
- ArrayIndexOutOfBoundsException
int[] arr = {1, 2, 3};System.out.println(arr[3]);
- ArithmeticException
int a = 10;int b = 0;System.out.println(a / b);
- ClassCastException
Object obj = "hello";Integer num = (Integer) obj;
自定义异常
继承Exception,必须要处理或声明
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,不需要处理
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); }}
今天的分享到这就结束了,记得三连哦,谢谢大家支持