【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和0
int 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和0
int 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和0
int 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和2
int 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 {
// 检查传入的年龄是否小于或等于0
if (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
块捕获,并打印了异常信息。