Java进阶之旅第八天
文章目录
- Java进阶之旅第八天
- 异常
- 作用
- 分类
- 编译时异常
- 运行时异常
- 异常的处理方式
- 默认的处理方式
- 自己处理(捕获异常)
- 异常的常见方法
- Throwable 的成员方法
- 代码
- 结果
- 异常的抛出处理
- throws和throw
- 自定义异常
异常
作用
- 自己写的代码在运行过程中发生某种错误,抛出的错误进行处理.使得自己能快速甄别错误信息
- 对可能出现的问题进行封装,查询bug的关键参考信息
分类
编译时异常
- 1.继承自 Exception 类,但不是继承自 RuntimeException 类。
- 2.在代码中必须显式地处理或声明抛出编译时异常。
- 3.编译时异常发生的地方必须处理该异常,否则代码无法通过编译。
- 4.编译时异常通常表示外部环境或资源的错误或异常情况,需要在代码中明确处理,以保证程序的健壮性和可靠性。
运行时异常
- 继承自 RuntimeException 类。
- 在代码中可以选择性地处理或声明抛出运行时异常。
- 运行时异常可以不被显式地捕获,也不需要在方法签名中声明抛出。
- 运行时异常通常表示程序逻辑的错误或异常情况,如空指针异常、数组越界异常等。
- 运行时异常一般由程序员编码错误导致,需要通过代码的调试和修复来解决。
异常的处理方式
默认的处理方式
- 1.把异常的名称,异常的原因以及异常出现的位置等信息输出在控制台
- 2.程序停止执行,下面的代码不会再执行了
- 代码:
System.out.println(2/0);
- 错误:
Exception in thread "main" java.lang.ArithmeticException: / by zero at Main.main(Main.java:5)
自己处理(捕获异常)
- 语法:
try{可能出现异常的代码块}catch(异常类名 变量名){异常的处理代码}
- 目的: 当代码出现异常时,可以让程序继续往下执行
- 代码:
try {System.out.println(2/0);}catch(ArithmeticException e){System.out.println("算术异常!");}System.out.println(("程序没有被停止"));
- 结果:
算术异常!
程序没有被停止
- 细节:
- 1.只有出现异常才会执行catch中的代码
- 2.在出现多个问题时,可以写过个catch进行捕获处理
- 3.当出现错误之后,会立即跳转到对应的catch中,并不再运行错误语句之后的代码
- 4.如果要写父类接收错误(Exception),需要将其写到最后一个catch中
- 5.在JDK7之后,我们可以在catch中同时捕获多个异常,中间用
|
隔开,在过个错误的处理方案一致时可以使用,例子:catch(ArithmeticException | ArrayIndexOutOfBoundsException e){}
- 6.代码中遇到的问题没有catch处理,会使用默认方式处理
异常的常见方法
Throwable 的成员方法
方法名 | 说明 |
---|---|
public String getMessage() | 返回此throwable的详细消息字符串 |
public String toString() | 返回此可抛出的剪短描述 |
public void printStackTrace()(常用 | 把异常的错误信息输出在控制台(不会结束程序 |
代码
try {System.out.println(2/0);}catch(ArithmeticException e){System.out.println(e.getMessage());System.out.println(e.toString());e.printStackTrace();}System.out.println(("程序没有被停止"));
结果
/ by zero
java.lang.ArithmeticException: / by zero
程序没有被停止
java.lang.ArithmeticException: / by zeroat Main.main(Main.java:7)
异常的抛出处理
throws和throw
- throws
- 注意: throws写在方法定义处,表示声明一个异常,告诉调用者,使用本方法可能会有哪些异常
- 写法:
public void 方法名() throws 异常类名1,异常类名2...{...}
- 编译时的异常: 必须要写,运行时的异常: 可以不写
- throw
- 注意: 写在方法内,结束方法,手动抛出异常对象,交给调用者方法中下面的代码不再执行
- 写法:
public void 方法名() {throw new NullPointerException();}
自定义异常
-
步骤
- 1.定义异常类(起名字技巧: 异常名+Exception)
- 2.写继承关系(编译时: Exception,运行时: RuntimeException)
- 3.空参构造/有参构造(继承之后快捷键Alt+Insert,可以选择构造函数,重写前两个即可)
-
代码
public class NameException extends RuntimeException{public NameException() {}public NameException(String message) {super(message);}
}
- 调用: 正常调用即可.例如:
throw new NameException()