定义:
指在运行环境正常的情况下遇到的运行时错误。异常是非致命的,但也会导致程序的非正常终止.Java可以捕获和处理异常.
分类:
1.检查性异常
通常发生在用户层面,例如用户希望打开一个不存在的文件
2.运行时异常
是运行时可以被程序员避免的异常
3.错误
一般指程序运行时遇到的硬件或操作系统的错误,如内存溢出、不能读取硬盘分区、 硬 件驱动错误等。这是致命的,将导致程序无法运行,同时也是程序本身不能处理的。
体系结构:
Java中将异常分为两类,Exception和Errror,异常也当作一个对象来看待,被定义在基类java.lang.Throwable类中
常用方式:
使用多个关键字来实现:try,catch,finally.
try:
通常在try语句块中存放可能会发生错误和异常的代码块.当在try中发现错误或异常时,会终止执行try中的代码转而去执行catch.
catch:
在catch语句块中存放对应错误或异常的解决方案,一个try可以存在多个catch,用于捕捉不同的异常或错误.当捕获到异常时,程序会依次遍历,查找符合条件的catch再进行对应操作.类似与if,else if的执行顺序,所以代码块应该从上到下异常或错误的范围大小应该依次增大
finally:
是程序一定会执行的代码块,无论有没有发生异常或错误,哪怕出现异常或错误,也会先执行finally中的语句.如果在finally中的语句也发生异常或错误,那将是非常危险和不专业的.
Throwable表示所有异常和错误的类,Error表示错误类,Exception表示异常类
ps:Throwable后面跟着的e是一个随机变量,用于存储捕获的异常或错误,无实际意义,也可为n,m,a,b等未知数.
public class Abnormal
{
public static void main(String[] args)
{
Scanner scanner = new Scanner(System.in);
int c = scanner.nextInt();
int a = 2;
int b = 0;
try//捕获异常
{
new Abnormal().a();
System.out.println(a/c);
}
catch (Error e)
{
System.out.println("栈溢出!");
}
catch(Exception e)
{
System.out.println("除数不能为0!");
}
catch (Throwable e)//想要处理的异常分类,Throwable>Error=Exception;catch(Throwable e)>catch(Error e)=catch(Exception e)
{
System.out.println("程序出现错误!");
//Throwable能够处理所有异常和错误,Error和Exception分别是错误和异常的最大分支
}
finally//无论程序是否出现异常,都会执行finally语句块中的代码
{
//通常在程序存在I/O流操作时,用于关闭I/O流,
scanner.close();
}
}
public void a() {b();}
public void b() {a();}