作者简介: 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就没意义了
编译时异常(受查异常)
编译时异常是指在编译程序时就可以检测到的异常,也称为受检异常。如果程序中没有对这些异常进行处理,编译器会报错,无法编译通过。
几个编译时异常:
-
FileNotFoundException(文件未找到异常):在读取文件时,如果文件不存在,就会抛出该异常。
-
IOException(输入输出异常):在进行输入输出操作时,如果操作失败,则会发生该异常。
-
SQLException(SQL异常):在进行数据库操作时,如果SQL语句有误或者连接数据库失败,就会抛出该异常。
-
ClassNotFoundException(类未找到异常):在加载类时,如果找不到指定的类,就会发生该异常。
这些异常都需要在代码中进行处理,否则编译器就会报错,无法编译通过。通常,我们会使用try-catch语句来捕获并处理这些异常。
运行时异常
运行时异常(RuntimeException)指的是在程序执行期间发生的异常,它们不需要在代码中显式地处理或声明。这些异常通常是由程序的错误逻辑或代码错误引起的,例如空指针异常(NullPointerException)、数组下标越界异常(ArrayIndexOutOfBoundsException)、算术异常(ArithmeticException)和类转换异常(ClassCastException)等。
下面给出几个例子:
- NullPointerException
java
String str = null;
System.out.println(str.length());
- ArrayIndexOutOfBoundsException
java
int[] arr = {1, 2, 3};
System.out.println(arr[3]);
- ArithmeticException
java
int a = 10;
int b = 0;
System.out.println(a / b);
- 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);
}
}
今天的分享到这就结束了,记得三连哦,谢谢大家支持