文章目录
1. 异常
1.1 异常的概述
异常就是程序出现了不正常的情况
1.2 异常的体系结构
- Error:错误,严重问题,不需要处理
- Exception:异常类,它表示程序本身可以处理的问题
- RuntimeException:在编译期间不检查,出现问题后,需要我们回来修改代码
- 非 RuntimeException:编译期间就必须处理的,否则程序不能通过编译
2. JVM默认处理异常的方式
- 如果程序出现了问题,我们没有做任何处理,最终JVM 会做默认的处理,处理方式有如下两个步骤:
- 把异常的名称,错误原因及异常出现的位置等信息输出在了控制台
- 程序停止执行
3. try-catch方式处理异常
3.1 定义格式
try {
可能出现异常的代码;
} catch(异常类名 变量名) {
异常的处理代码;
}
3.2 执行流程
- 程序从 try 里面的代码开始执行
- 出现异常,就会跳转到对应的 catch 里面去执行
- 执行完毕之后,程序还可以继续往下执行
3.3 示例代码
public class Demo {
public static void method() {
try {
int[] arr = {1, 2, 3};
System.out.println(arr[3]);
System.out.println("这里能够访问到吗");
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("你访问的数组索引不存在,请回去修改为正确的索引");
e.printStackTrace();
}
}
public static void main(String[] args) {
System.out.println("开始");
method();
System.out.println("结束");
}
}
4. Throwable成员方法
4.1 常用方法
方法名 | 说明 |
---|---|
public String getMessage() | 返回此 throwable 的详细消息字符串 |
public String toString() | 返回此可抛出的简短描述 |
public void printStackTrace() | 把异常的错误信息输出在控制台 |
5. 编译时异常和运行时异常的区别
- 编译时异常
- 都是Exception类及其子类
- 必须显示处理,否则程序就会发生错误,无法通过编译
- 运行时异常
- 都是RuntimeException类及其子类
- 无需显示处理,也可以和编译时异常一样处理
6. throws方式处理异常
6.1 定义格式
public void 方法() throws 异常类名 {
}
6.2 示例代码
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Demo {
public static void main(String[] args) {
System.out.println("开始");
// method();
try {
method2();
}catch (ParseException e) {
e.printStackTrace();
}
System.out.println("结束");
}
//编译时异常
public static void method2() throws ParseException {
String s = "2048-08-09";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date = sdf.parse(s);
System.out.println(date);
}
//运行时异常
public static void method() throws ArrayIndexOutOfBoundsException {
int[] arr = {1, 2, 3};
System.out.println(arr[3]);
}
}
6.3 注意事项
- 这个throws格式是跟在方法的括号后面的
- 编译时异常必须要进行处理,两种处理方案:try…catch …或者 throws,如果采用 throws 这种方案, 将来谁调用谁处理
- 运行时异常可以不处理,出现问题后,需要我们回来修改代码
7. throws和throw的区别
7.1 throw
- 用在方法体内,跟的是异常对象名
- 表示抛出异常,由方法体内的语句处理
- 执行 throw 一定抛出了某种异常
7.2 throws
- 用在方法声明后面,跟的是异常类名
- 表示抛出异常,由该方法的调用者来处理
- 表示出现异常的一种可能性,并不一定会发生这些异常
8. 自定义异常
- 自定义异常类需从Exception类或者它的子类派生一个子类。
- 自定义异常类如果继承Exception类,则为受检查异常,必须对其进行处理;如果不想处理,可以让自定义异常类继承运行时异常RuntimeException类。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容