【从零开始学Java | 第三十三篇】异常(Exception)

张开发
2026/4/12 21:43:48 15 分钟阅读

分享文章

【从零开始学Java | 第三十三篇】异常(Exception)
目录前言一、异常体系介绍二、异常1.异常的作用2.异常的处理方式①JVM默认处理方式②捕获异常三、Throwable的成员方法1.throw和throws的区别①throws②throw前言在 Java 开发中异常Exception是一个绕不开的话题。无论你是刚学 Java还是已经开始做项目开发都会频繁遇到这些问题为什么代码会报异常Exception和Error有什么区别什么是运行时异常什么是编译时异常throw和throws到底怎么区分try-catch-finally应该怎么写才规范为什么要自定义异常这篇文章就带你系统梳理 Java 异常机制争取一篇文章把这个知识点讲透。一、异常体系介绍我们只需要看Exception即可Error表示的是严重错误通常是 JVM 或系统级别的问题一般程序员无法通过代码处理。Exception异常代表程序可能出现的问题。运行时异常RuntimeException及其子类编译阶段不会出现异常提醒。运行时出现的异常如数组索引越界异常编译时异常编译阶段就会出现异常提醒。如日期解析异常二、异常1.异常的作用作用一异常是用来查询bug的关键参考信息。作用二异常可以作为方法内部的一种特殊返回值以便通知调用者底层的执行情况。当我写了一个有异常的程序并且运行之后public class Test { public static void main(String[] args) { String str null; System.out.println(str.length()); } }在之前如果想实现一个不合法数据的处理通常会选择直接打印在控制台掌握了异常之后我们可以直接抛出异常。public void setAge(int age) { if(age 18 || age 40){throw new RuntimeException(); }else{ this.age age; } }public class Test { public static void main(String[] args) { Student s1 new Student(); s1.setAge(50); } }2.异常的处理方式JVM默认处理方式捕获异常自己处理抛出异常交给调用者处理①JVM默认处理方式把异常的名称异常原因以及异常出现的位置等信息输出在了控制台程序停止执行异常下面的代码不会再执行public class Test { public static void main(String[] args) { System.out.println(第一句); System.out.println(2/0); System.out.println(第二句); System.out.println(第三句); } }当我执行上面这段代码时只会执行第一句遇到异常后直接停止。②捕获异常格式try{可能出现异常的代码;} catch(异常类名 变量名){异常的处理代码;}目的当代码出现异常时可以让程序继续往下执行。public class Test { public static void main(String[] args) { try { int result 10 / 0; System.out.println(result); } catch (ArithmeticException e) { System.out.println(出现了算术异常 e.getMessage()); } System.out.println(看我执行了吗); } }输出结果执行流程先执行try中的代码如果没有异常catch不执行如果出现异常程序会跳到匹配的catch块执行执行完catch后继续往下走三、Throwable的成员方法方法名称说明public StringgetMessage()返回此Throwable的详细消息字符串public StringtoString()返回此可抛出的简短描述public voidprintStackTrace()把异常的错误信息输出在控制台public class Test { public static void main(String[] args) { try { int result 10 / 0; System.out.println(result); } catch (ArithmeticException e) { String message e.getMessage(); System.out.println(message); String str e.toString(); System.out.println(str); e.printStackTrace(); } System.out.println(看我执行了吗); } }1.throw和throws的区别①throws写在方法定义处表示声明一个异常告诉调用者使用本方法可能会有哪些异常。格式public void 方法() throws 异常类名1, 异常类名2...{}编译时异常必须要写运行时异常可以不写②throw写在方法内结束方法手动抛出异常对象交给调用者方法中下面的代码不再执行。格式public void 方法(){throw new NullPointerException();}示例public class Demo {public static void main(String[] args) {int age -1;if (age 0) {throw new IllegalArgumentException(年龄不能为负数);}}}这里是程序员主动制造一个异常告诉程序“这里有非法情况”。区别总结throw在方法体内部真正“扔出”异常对象throws在方法声明处声明“我这个方法可能会抛异常”

更多文章