Java基础系列(基础):Java异常机制以及常见的十四个基本异常!

Java基础系列(基础):搞清楚Java异常机制!


前言

今天博主将为大家分享:Java基础系列(基础):搞清楚Java异常机制!不喜勿喷,如有异议欢迎讨论!


一:异常机制

在这里插入图片描述


Throwable

  • Throwable是Java异常的顶级类,所有的异常都继承于这个类。

  • Error,Exception是异常类的两个大分类。


Error

  • Error是非程序异常,即程序不能捕获的异常,一般是编译或者系统性的错误,如OutOfMemorry内存溢出异常等。

Exception

  • Exception是程序异常类,由程序内部产生。Exception又分为运行时异常、非运行时异常。

运行时异常

  • Exception是程序异常类,由程序内部产生。Exception又分为运行时异常、非运行时异常。
  1. java.lang.NullPointerException
    这个异常的解释是 "程序遇上了空指针 ",简单地说就是调用了未经初始化的对象或者是不存在的对象,这个错误经常出现在创建图片,调用数组这些操作中,比如图片未经初始化,或者图片创建时的路径错误等等。对数组操作中出现空指针,即把数组的初始化和数组元素的初始化混淆起来了。数组的初始化是对数组分配需要的空间,而初始化后的数组,其中的元素并没有实例化,依然是空的,所以还需要对每个元素都进行初始化(如果要调用的话)。

  2. java.lang.ClassNotFoundException
    异常的解释是"指定的类不存在",这里主要考虑一下类的名称和路径是否正确即可
    public static <T> Class<T> getExistingClass(ClassLoader classLoader, String className) {
    try {
    return (Class<T>) Class.forName(className, true, classLoader);
    }
    catch (ClassNotFoundException e) {
    return null;
    }
    }

  3. java.lang.ArrayIndexOutOfBoundsException
    这个异常的解释是"数组下标越界",现在程序中大多都有对数组的操作,因此在调用数组的时候一定要认真检查,看自己调用的下标是不是超出了数组的范围,一般来说,显示(即直接用常数当下标)调用不太容易出这样的错,但隐式(即用变量表示下标)调用就经常出错了,还有一种情况,是程序中定义的数组的长度是通过某些特定方法决定的,不是事先声明的,这个时候,最好先查看一下数组的length,以免出现这个异常。

  4. ***java.lang.NoSuchMethodError ***
    方法不存在错误。当应用试图调用某类的某个方法,而该类的定义中没有该方法的定义时抛出该错误。

    public Method getMethod(String name, Class<?>… parameterTypes)
    throws NoSuchMethodException, SecurityException {
    checkMemberAccess(Member.PUBLIC, Reflection.getCallerClass(), true);
    Method method = getMethod0(name, parameterTypes, true);
    if (method == null) {
    throw new NoSuchMethodException(getName() + “.” + name + argumentTypesToString(parameterTypes));
    }
    return method;
    }

  5. java.lang.IndexOutOfBoundsException
    索引越界异常。当访问某个序列的索引值小于0或大于等于序列大小时,抛出该异常。 它是运行时异常,不需要手工捕获。
    在这里插入图片描述

  6. java.lang.NumberFormatException
    数字格式异常。当试图将一个String转换为指定的数字类型,而该字符串确不满足数字类型要求的格式时,抛出该异常。

  7. java.sql.SQLException
    SQL异常,发生在操作数据库时的异常。
    如下面的获取连接:

    public Connection getConnection() throws SQLException {
    if (getUser() == null) {
    return DriverManager.getConnection(url);
    } else {
    return DriverManager.getConnection(url, getUser(), getPassword());
    }
    }
    又或者是获取下一条记录的时候:

    boolean next() throws SQLException;

  8. java.io.IOException
    IO,即:input, output,我们在读写磁盘文件、网络内容的时候经常会生的一种异常,这种异常是受检查异常,需要进行手工捕获。
    如文件读写会抛出 IOException:
    public int read() throws IOException
    public void write(int b) throws IOException

  9. java.lang.IllegalArgumentException
    方法参数错误

  10. java.lang.IllegalAccessException
    无访问权限异常

  11. OutOfMemoryError
    内存异常异常,这不是程序能控制的,是指要分配的对象的内存超出了当前最大的堆内存,需要调整堆内存大小(-Xmx)以及优化程序。

  12. FileNotFoundException
    文件找不到异常,如果文件不存在就会抛出这种异常。
    如定义输入输出文件流,文件不存在会报错:
    public FileInputStream(File file) throws FileNotFoundException
    public FileOutputStream(File file) throws FileNotFoundException
    FileNotFoundException 其实是 IOException 的子类,同样是受检查异常,需要进行手工捕获。

  13. ClassCastException
    类转换异常,将一个不是该类的实例转换成这个类就会抛出这个异常。
    如将一个数字强制转换成字符串就会报这个异常:
    Object x = new Integer(0);
    System.out.println((String)x);
    这是运行时异常,不需要手工捕获。

  14. ArithmeticException
    算术异常,发生在数字的算术运算时的异常,如一个数字除以 0 就会报这个错。
    double n = 3 / 0;
    这个异常虽然是运行时异常,可以手工捕获抛出自定义的异常,如:

    public static Timestamp from(Instant instant) {
    try {
    Timestamp stamp = new Timestamp(instant.getEpochSecond() * MILLIS_PER_SECOND);
    stamp.nanos = instant.getNano();
    return stamp;
    } catch (ArithmeticException ex) {
    throw new IllegalArgumentException(ex);
    }
    }


非运行时异常

  • 非运行时异常是程序必须进行处理的异常,捕获或者抛出,如果不处理程序就不能编译通过。如常见的IOException、ClassNotFoundException等。

到这里:Java基础系列(基础):搞清楚Java异常机制!分享完毕了,快去试试吧!


最后

  • 更多参考精彩博文请看这里:《陈永佳的博客》

  • 喜欢博主的小伙伴可以加个关注、点个赞哦,持续更新嘿嘿!


猜你喜欢

转载自blog.csdn.net/Mrs_chens/article/details/94387953