异常概述
思考:当代码出现了问题,程序是如何体现的?
异常就是用来描述代码中出现的问题。
异常:就是程序出现了不正常的情况。程序在执行过程中,出现的非正常的情况。
最终会导致 JVM 的非正常停止。
注意:语法错误不算在异常体系中。
异常体系
编译时异常和运行时异常
简单来说:编译时异常就是在编译的时候出现的异常,运行时异常就是在运行的时候出现的异常。
JVM的默认处理方案
如果程序出现了问题,我们没有做任何处理,最终 JVM会默认做处理。
1.JVM 会把异常的名称,异常原因及异常出现的位置等信息输出在控制台。
2.程序停止运行。
小结
1.异常就是程序出现不正常的的情况。
2.异常的两类?
编译时异常、运行时异常
3.虚拟机默认处理异常的方式?
将异常信息以红色字体打印在控制台,结束程序运行。
异常处理方式
异常处理方式——throws
格式:
throws 异常类名;
注意:这个格式是写在方法的定义处,表示声明一个异常。
编译时异常因为在编译时就会检查,所以必须要写在方法后边进行显示说明。
运行时异常因为在运行时才会发生,所以在方法后边可以不写。
抛出对象 ——throw
思考:以前出现了异常,虚拟机会帮我们创建一个异常,抛给调用者。
但是如果我们需要自己手动创建一个异常对象该如何写?
格式:
throw new 异常();
注意:这个格式是在方法内,表示当前代码手动抛出了一个异常,下面的代码不用再
执行了。
throws 和 throw 的区别
throws | throw |
---|---|
用在方法声明后边,跟的是异常类名 | 用在方法体内,跟的是异常对象名 |
表示声明异常,调用该方法有可能会出现这样的异常 | 表示手动抛出异常对象,由方法体内的语句处理 |
抛出处理异常的意义
1.在方法中,当传递的参数有误,没有继续进行下去的意义了,则采取抛出处理,
表示让该方法结束运行。
2.告诉调用者方法中出现了问题。
异常处理方式——try…catch…
格式:
try {
可能出现异常的代码;
}catch(异常类名 变量名) {
异常处理的代码;
}
好处:可以让程序继续往下执行。
注意:
如果 try 中没有遇到问题,怎么执行?
程序正常执行。
如果 try 中遇到了问题,那么 try 下面的代码还会执行吗?
会正常执行。
如果出现的问题没有被捕获,那么程序如何运行?
程序会将异常继续向上抛给调用者,直到抛给虚拟机,虚拟机进行默认处理。
同时出现多个异常怎么处理?
定义多个 catch 语句。顶级异常父类必须放在子类的最底下。
Throwable 的成员方法
方法名 | 说明 |
---|---|
public String getMessage() | 返回 throwable 的详细信息字符串 |
public String toString() | 返回此可抛出的简短描述 |
public void printStackTrace() | 把异常的错误信息输出在控制台(字体加红)但下面的代码可以正常执行 |
两种处理异常方式的小结
抛出 throw throws
1.在方法中,当传递的参数有误,没有继续运行下去的意义了,则采取抛出处理,
表示让该方法结束运行。
2.告诉调用者出现了问题。
捕获 try…catch
捕获:能让代码继续往下运行。
自定义异常
步骤
1.定义异常类
2.写继承关系
3.空参构造
4.有参构造
自定义异常存在的意义
就是为了让控制台的报错信息更加的见名知意。
小结
1.为什么要学习异常?
因为我们要处理代码中出现的问题。
2.异常的处理方式:抛出和捕获
抛出的意义:让方法停止并告诉调用者这里出现了问题。
捕获的意义:让程序可以继续往下执行。
3.自定义异常的意义:让程序的提示报错更加的见名知意。