【Java】异常处理实例解析
文章目录
- Java异常处理实例解析
- Example01_2023yang:未处理的异常
- Example02_2023yang:捕获并处理异常
- Example03_2023yang:finally块的使用
- Example04_2023yang:自定义异常
- Example05_2023yang:忽略异常信息
- Example06_2023yang:方法声明抛出异常
- Example07_2023yang:抛出并捕获自定义异常
- Example09_2023yang:自定义异常类
Java异常处理实例解析
在Java编程中,异常处理是一个重要的概念,它帮助我们处理程序运行时可能出现的错误。以下是几个关于异常处理的示例,每个示例都包含了详细的注释和运行结果。
Example01_2023yang:未处理的异常
public class Example01_2023yang {public static void main(String[] args) {// 调用divide方法,传入参数4和0int result = divide(4, 0);// 打印divide方法的返回结果System.out.println(result);}public static int divide(int x, int y) {// 计算x除以y的结果,并赋值给result变量int result = x / y;// 返回计算结果return result;}
}
运行结果:
java.lang.ArithmeticException: / by zero
解释: 这个示例中,divide
方法尝试将4除以0,这在Java中是不允许的,因此会抛出一个 ArithmeticException
。
Example02_2023yang:捕获并处理异常
public class Example02_2023yang {public static void main(String[] args) {try {// 定义数组下标越界的案例int[] a = {1, 2, 3};System.out.println(a[5]);// 尝试调用divide方法,传入参数4和0int result = divide(4, 0);// 如果divide方法没有抛出异常,打印结果System.out.println(result);} catch (Exception e) {// 如果divide方法抛出异常,捕获异常并打印异常信息System.out.println("捕捉的异常信息为:" + e.getMessage());}// 打印这条信息表示程序继续向下执行System.out.println("程序进行向下执行.....");}public static int divide(int x, int y) {// 计算x除以y的结果,并赋值给result变量int result = x / y;// 返回计算结果return result;}
}
运行结果:
捕捉的异常信息为:/ by zero
程序进行向下执行.....
解释: 这个示例中,我们尝试访问数组的一个不存在的索引,这会抛出一个 ArrayIndexOutOfBoundsException
。然后,我们尝试将4除以0,这会抛出一个 ArithmeticException
。这两个异常都被 catch
块捕获,并打印了异常信息。
Example03_2023yang:finally块的使用
public class Example03_2023yang {public static void main(String[] args) {try {// 尝试调用divide方法,传入参数4和0int result = divide(4, 0);// 如果divide方法没有抛出异常,打印结果System.out.println(result);} catch (Exception e) {// 如果divide方法抛出异常,捕获异常并打印异常信息System.out.println("捕捉的异常信息为:" + e.getMessage());// 遇到异常后,main方法结束执行return;} finally {// 无论是否发生异常,finally代码块都会执行System.out.println("进入finally代码块");}// 如果没有异常发生,或者在catch代码块中没有return,程序会继续向下执行System.out.println("程序继续向下....");}public static int divide(int x, int y) {// 计算x除以y的结果,并赋值给result变量int result = x / y;// 返回计算结果return result;}
}
运行结果:
捕捉的异常信息为:/ by zero
进入finally代码块
解释: 这个示例中,finally
代码块无论是否发生异常都会执行。即使在 catch
块中有 return
语句,finally
代码块仍然会执行。
Example04_2023yang:自定义异常
public class Example04_2023yang {public static void main(String[] args) {try {// 调用divide方法,传入参数4和0来模拟除以零的情况int result = divide(4, 0);// 如果divide方法没有抛出异常,打印结果System.out.println(result);} catch (Exception e) {System.out.println("开始处理Exception类型异常");// 如果divide方法抛出异常,捕获异常并打印异常信息System.out.println("发生异常:" + e.getMessage());} finally {System.out.println("我是finally处理的内容");}}public static int divide(int x, int y) throws Exception {// 检查除数是否为0,如果是,则抛出ArithmeticException异常if (y == 0) {throw new Exception("除数不能为0");}// 计算x除以y的结果,并赋值给result变量int result = x / y;// 返回计算结果return result;}
}
运行结果:
开始处理Exception类型异常
发生异常:除数不能为0
我是finally处理的内容
解释: 这个示例中,divide
方法在除数为0时抛出了一个自定义的 Exception
。这个异常被 catch
块捕获,并打印了异常信息。
Example05_2023yang:忽略异常信息
public class Example05_2023yang {public static void main(String[] args) {try {// 尝试调用divide方法,传入参数4和2int result = divide(4, 2);// 如果divide方法没有抛出异常,打印结果System.out.println(result);} catch (Exception e) {// 如果divide方法抛出异常,捕获异常但忽略异常信息e.getMessage();}}public static int divide(int x, int y) {// 计算x除以y的结果,并赋值给result变量int result = x / y;// 返回计算结果return result;}
}
运行结果:
2
解释: 这个示例中,divide
方法正常执行并返回结果。catch
块捕获了异常,但没有打印异常信息。
Example06_2023yang:方法声明抛出异常
public class Example06_2023yang {public static void main(String[] args) throws Exception {// 调用divide方法,传入参数4和0,这里会发生除以零的操作int result = divide(4, 0);// 打印divide方法的返回结果// 但由于除以零,这里实际上不会执行,程序会在divide方法中抛出异常System.out.println(result);}public static int divide(int x, int y) {// 计算x除以y的结果,并赋值给result变量// 在这个例子中,当y为0时,会发生除以零的操作,导致程序抛出ArithmeticException异常int result = x / y;// 返回计算结果return result;}
}
运行结果:
java.lang.ArithmeticException: / by zero
解释: 这个示例中,main
方法声明抛出 Exception
,divide
方法在除数为0时抛出了 ArithmeticException
,这个异常被 main
方法抛出。
Example07_2023yang:抛出并捕获自定义异常
public class Example07_2023yang {public static void printAge(int age) throws Exception {// 检查传入的年龄是否小于或等于0if (age <= 0) {// 如果年龄不合法(小于或等于0),则抛出一个Exception异常,并附带错误信息throw new Exception("输入年龄有误,必须是整数!");} else {// 如果年龄合法,打印出此人的年龄System.out.println("此人年龄为:" + age);}}public static void main(String[] args) {// 定义一个变量age并初始化为-1,这里模拟了一个非法的年龄值int age = -1;try {// 调用printAge方法,传入age变量printAge(age);} catch (Exception e) {// 如果printAge方法抛出异常,捕获这个异常并打印异常信息System.out.println("捕获的异常信息为:" + e.getMessage());}}
}
运行结果:
捕获的异常信息为:输入年龄有误,必须是整数!
解释: 这个示例中,printAge
方法在年龄不合法时抛出了一个自定义的 Exception
。这个异常被 main
方法的 catch
块捕获,并打印了异常信息。
Example09_2023yang:自定义异常类
class DivideByminusException extends Exception {// 构造函数,不提供任何信息,调用父类的无参构造函数public DivideByminusException() {super();}// 构造函数,接收一个字符串消息作为异常信息,调用父类的带消息的构造函数public DivideByminusException(String message) {super(message);}
}public class Example09_2023yang {public static void main(String[] args) {try {// 调用divide方法,传入参数4和-2,这里模拟了一个除以负数的情况int result = divide(4, -2);// 如果divide方法没有抛出异常,打印结果System.out.println(result);} catch (DivideByminusException e) {// 如果divide方法抛出DivideByminusException异常,捕获这个异常并打印异常信息System.out.println(e.getMessage());}}public static int divide(int x, int y) throws DivideByminusException {// 检查除数是否为负数,如果是,则抛出DivideByminusException异常if (y < 0) {throw new DivideByminusException("除数是负数");}// 计算x除以y的结果,并赋值给result变量int result = x / y;// 返回计算结果return result;}
}
运行结果:
除数是负数
解释: 这个示例中,divide
方法在除数为负数时抛出了一个自定义的 DivideByminusException
。这个异常被 main
方法的 catch
块捕获,并打印了异常信息。