-
什么是异常?
异常指的时程序在【编译】和【运行时】的一些不正常的状况。 Java的工程师其实早就想到可能会出现这些问题,他们把常见的问题写成类。 当我们出现这些异常时,可以根据API中去查找这些异常产生的原因。
ArrayIndexOutOfBoundsException: 数组索引越界异常
NullPointerException: 空指针异常
… -
异常的体系结构?
异常的根类Throwable,它下面有两个子类Error和Exception
Throwable
– Error: 非常严重的问题(错误,不需要解决)
– Exception: 表示异常(可以解决)
–Exception的直接子类:编译时异常,在编译时给出错误提示
–RuntimeException的子类:运行时异常,在运行时打印在控制台(异常信息) -
如何处理异常?
3.1:不做任何处理,就是交给JVM处理
特点:直接终止程序运行,把异常信息打印在控制台3.2:使用 try … catch 处理:
特点:把可能出现异常的代码包裹起来,即使有异常产生,【代码还能继续执行】
try{
//有可能出现异常的代码
}catch(异常类1 e1){
//如果try有异常产生,就会被catch捕获到,就执行catch里面的代码
}catch(异常类2 e2){
…
}catch(Exception e3){
//不管try里面有什么异常,这里都可以捕获
}finally{
//不管前面异常是否产生,finally里面的代码都回执行
}3.3:使用 throws 声明异常:
//在写一个方法时,方法中可能产生异常,需要使用throws声明。
public static void show(String s) throws 异常类{
//在方法中,可能由于调用者传递的参数不正确,导致代码出现异常。
}
//处理可能发生的异常
public class Demo1 {public static void main(String[] args) {//需求:传入一个生日,得到年龄//2.try catchtry {show("2020/10-10");//两种方法,1.和方法一样将异常抛出给虚拟机,出现异常,虚拟机会打印异常信息}catch (ParseException e){e.printStackTrace();//打印全部[用的最多]//System.out.println(e.toString());//把异常对象转换为字符串[异常类类名+异常的解释]//System.out.println(e.getMessage());//仅仅是异常的解释}catch (Exception e){System.out.println("不管什么异常,都可以捕获");}finally {System.out.println("不管有没有异常,都可以执行");}System.out.println("over");}public static void show(String birthday) throws ParseException {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");Date parse = sdf.parse(birthday);//throws 异常申明,抛给使用者long time1 = parse.getTime();long time2 = System.currentTimeMillis();System.out.println("年龄为: "+(time2-time1)/1000/60/60/365);}
}打印结果:
--------------------------------------------------------------
java.text.ParseException: Unparseable date: "2020/10-10"at java.base/java.text.DateFormat.parse(DateFormat.java:395)at com.itheima.Demo1.show(Demo1.java:28)at com.itheima.Demo1.main(Demo1.java:13)
不管有没有异常,都可以执行
over
4.Throwable的方法 【异常对象为 上面第3点的 e】
Throwable类中提供了一些方法,所有的异常对象都能调用。
public String toString()
把异常对象转换为字符串,有 “异常常类名:异常的解释”
public String getMessage()
获取异常对象的解释(消息),就是异常信息”:"后面的一部分
public void void printStackTrace()
打印异常的所有信息,包含异常的类名+异常的解释(消息)+异常的位置