异常(Exception)指的是所有可能造成计算机无法正常处理的情况。发生异常时,将阻止程序的运行,若不妥善处理异常,可能造成计算机死机。经过异常处理,可以保证程序的正常运行,我们把针对不同的异常做妥善的处理的方式叫做“异常处理机制”。
异常处理的目的:加强程序的健壮性、安全性。
Java 中,所有的异常都被封装到相应的类中,同时,用户也可以自定义异常类和自定义抛出异常。
Throwable
异常类是指由程序抛出的异常对象所属的类。
异常可以分为两大类: java.lang.Exception
类和 java.lang.Error
类。这两个类均继承自 java.lang.Throwable
类
异常 | 描述 |
---|---|
NullPointerException | 空指向异常(空指针异常)。指的是使用了一个未初始化的对象(未开辟内存空间的对象)。 |
ArithmeticException | 算术异常。如:除以零 |
ArrayIndexOutOfBoundsException | 数组下标越界异常。数组的索引超过了上界或下界 |
FileNotFoundException | 文件未找到异常 |
OutOfMemoryExceptin | 内存溢出异常(内存不足异常)。可用内存不足以分配给一个对象时抛出 |
NoSuchElementExceptin | 调用了类集中不存在的元素 |
ClassCastExceptin | 对象与类集中的元素不兼容 |
UnsupportedOperationExceptin | 修改一个不允许修改的对象 |
try-catch-finally
死了都要 try,不 try 到 catch 不痛快
当发生异常时,通常有两种处理方法:
try-catch-finally
异常处理的语法:
try { // 要检查的语句 } catch (异常类 e) { // 异常发生时的处理语句 e.printStackTrace(); // 打印异常信息 } finally { // 一定会运行到的语句 }
throws
方法头中使用 throws
关键字可以表明这个方法可能存在的异常类型,此方法不处理异常,而是将该异常提交给调用这个方法的方法。
public class Test { public static void main(String[] args) { int[] arr = new int[5]; try { setZero(arr, 10); } catch (Exception e) { e.printStackTrace(); } System.out.println("end"); } public static void setZero(int[] arr, int index) throws ArrayIndexOutOfBoundsException { arr[index] = 0; } }
throw
throws
用于方法声明中,声明一个方法会抛出哪些异常,而 throw
是方法体中实际执行抛出异常的动作。
throw 异常类型的实例
try { throw new ArrayIndexOutOfBoundsException("我是异常信息"); } catch (Exception e) { e.printStackTrace(); }
当系统提供的异常类不足以满足业务需求时,我们可以自定义异常类
class 自定义异常类 extends 异常类型 { }
public class Test { public static void main(String[] args) { try { throw new MyException("我是自定义异常类"); } catch (Exception e) { e.printStackTrace(); } } } class MyException extends Exception { private String msg; public MyException(String msg) { this.msg = msg; } @Override public String toString() { return "MyException [msg=" + msg + "]"; } }