了解异常的概念和体系
异常就是代表程序出现的问题
- Error:代表的系统级别错误(属于严重问题),也就是说系统一旦出现问题,sun公司会把这些问题封装成Error对象给出来, 说白了,Error是给sun公司自己用的,不是给我们程序员用的,因此我们开发人员不用管它。
- Exception:叫异常,它代表的才是我们程序可能出现的问题,所以,我们程序员通常会用Exception以及它的孩子来封装程序出现的问题。
-
- 运行时异常:RuntimeException及其子类,编译阶段不会出现错误提醒,运行时出现的异常(如:数组索引越界异常)
- 编译时异常:编译阶段就会出现错误提醒的。(如:日期解析异常)
掌握异常处理方式try…catch
- Java中处理异常的2种方式
-
- try/catch处理异常, 负责任
-
-
- try格式:try { 可能出现异常的代码;} catch(异常类名 变量名) { 异常的处理代码;}
-
-
- throws处理异常, 不负责任(直接在方法名后面抛出异常)
public class ExceptionTest1 {
public static void main(String[] args) throws ParseException{
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date d = sdf.parse("2028-11-11 10:24");
System.out.println(d);
} catch (ParseException e) {
e.printStackTrace();
}
}
}
/**
* 目标:认识异常。
*/
public class ExceptionTest1 {
public static void main(String[] args) throws ParseException{
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date d = sdf.parse("2028-11-11 10:24");
System.out.println(d);
}
}
掌握finally代码块
- finally代码块作用
- 有一些特定的代码无论异常是否发生,都需要执行。另外,因为异常会引发程序跳转,导致有些语句执行不到。而finally就是解决这个问题的。
- 在finally代码块中的代码一定会被执行
try {
可能出现异常的代码;
} catch(异常类名 变量名) {
异常的处理代码;
} finally {
代码;
}
掌握异常处理方式2-throws
- 掌握异常处理方式2-throws
修饰符 返回值类型 方法名(参数) throws 异常类名1, 异常类名2 {
}
了解自定义异常和使用自定义异常
- 为什么需要自定义异常类
JDK提供的异常虽然比较多,但是不一定符合我们的需求。
此时我们根据自己业务的异常情况来定义异常类,例如年龄负数问题,考试成绩负数问题
- 步骤
定义类继承Exception/RuntimeException
编写构造器
在对应的方法中抛出异常
// 1、必须让这个类继承自Exception,才能成为一个编译时异常类。
public class AgeIllegalException extends Exception{
public AgeIllegalException() {
}
public AgeIllegalException(String message) {
super(message);
}
}
public class ExceptionTest2 {
public static void main(String[] args) {
// 需求:保存一个合法的年
try {
saveAge2(225);
System.out.println("saveAge2底层执行是成功的!");
} catch (AgeIllegalException e) {
e.printStackTrace();
System.out.println("saveAge2底层执行是出现bug的!");
}
}
//2、在方法中对age进行判断,不合法则抛出AgeIllegalException
public static void saveAge(int age){
if(age > 0 && age < 150){
System.out.println("年龄被成功保存: " + age);
}else {
// 用一个异常对象封装这个问题
// throw 抛出去这个异常对象
throw new AgeIllegalRuntimeException("/age is illegal, your age is " + age);
}
}
}