异常
一、概念
程序中阻止当前方法或作用域继续执行的问题,称作异常。
异常的好处:将问题进行封装,将正常流程代码和问题处理代码相分离,方便阅读。
分别是Error类和Exception类 。 Error一般是虚拟机错误或者线程死锁,系统错误内存溢出。这里我们主要讨论后者,Exception是编码、环境、用户操作、输入出现问题。
二、处理
一般用try-catch或者try-catch-finally捕获并处理异常。
多个catch时父类的catch放在下面
- try 块:用于捕获异常。其后可接零个或多个catch块,如果没有catch块,则必须跟一个finally块。
- catch 块:用于处理try捕获到的异常。
- finally 块:无论是否捕获或处理异常,finally块里的语句都会被执行。当在try块或catch块中遇到return语句时,finally语句块将在方法返回之前被执行。
e.printStackTrace();输出异常的位置类型信息原因
e.toString();输出异常类型及异常信息
e.getMessage();输出异常信息
三、异常分类
Java异常类层次结构图
Error(错误):是程序无法处理的错误,表示运行应用程序中较严重问题。大多数错误与代码编写者执行的操作无关,而表示代码运行时 JVM(Java 虚拟机)出现的问题
Exception(异常):是程序本身可以处理的异常。Exception 类有一个重要的子类 RuntimeException。RuntimeException 异常由Java虚拟机抛出
注意:异常和错误的区别:异常能被程序本身可以处理,错误是无法处理。
四、自定义异常
必须是自定义类要继承exception或者RuntimeException
class myexcption extends exception{ myexcption(String message){ super(message); } }
五、补充
RuntimeException异常
如果在函数内容抛出该异常,函数上可以不用声明,编译一样通过
如果在函数上声明了该异常,调用者可以不用进行处理,编译一样通过。
throw 和throws区别:
throw:使用在函数内,后跟的是异常对象()下面
throws:使用在函数上,后面跟的是异常类,可以跟多个
异常有两种:
1.编译时被检测异常
2.运行时异常(编译时不检测)