面试题之Error和Exception总结

一、异常体系简介

异常机制其实是帮助我们找到程序中的问题,异常的根类是 java.lang.Throwable ,其下有两个子类:

  • java.lang.Error
  • java.lang.Exception

概念:

  • Error:程序中发生的严重错误Error,无法处理的错误,只能事先避免; 如内存溢出等
  • Exception:表示异常,异常产生后程序员可以通过代码的方式纠正,使程序继续运行,是必须要处理的;

二、异常分类

  • 编译时异常:检查时异常。在编译时期就检查,如果没有处理异常,则编译失败。

常见的编译时异常如下表:

FileNotFoundException

文件未找到异常

ParseException

时间格式化异常

IOException

IO操作异常

ClassNotFoundException

类未找到异常

  • 运行时异常:非检查时异常。在运行时期检查异常。在编译时期,运行异常不会编译器检测(不报错)。

常见的运行时异常如下表:

IndexOutOfBoundsException

下标越界异常

NumberFormatException

数字转换异常

NullPointException

空指针异常

ClassCastException

类型转换异常

ArithmeticException

算术运算异常

IllegaArguementException

非法参数异常

三、异常的处理

Java异常处理的五个关键字:try、catch、finally、throw、throws。

【3.1】抛出异常throw

throw关键字,用来抛出一个指定的异常对象。

抛出异常的方法:

  • 1. 创建一个异常对象。封装一些提示信息(信息可以自己编写)。
  • 2. throw用在方法内,用来抛出一个异常对象,将这个异常对象传递到调用者处,并结束当前方法的执行。

使用格式:

throw new 异常类名(参数);
如:
throw new NullPointerException("空指针异常..."); 
throw new ArrayIndexOutOfBoundsException("数组下标越界异常...");

使用示例:

public static int getElement(int[] arr,int index){ 
    //判断数组下标是否越界 
    if(index<0 || index > arr.length‐1) { 
          //结束当前方法的执行,并将异常告知给调用者
         throw new ArrayIndexOutOfBoundsException("数组下标越界异常...");
      } 
     int element = arr[index]; 
     return element;
     }

【3.2】异常第一种处理方式:声明异常throws

声明异常:指的是将异常抛出去给调用者。如果方法内通过throw抛出了编译时异常,而没有捕获处理,那么必须通过throws进行声明,让调用者去处理。

关键字throws运用于方法声明之上,用于表示当前方法不处理异常,而是提醒该方法的调用者来处理异常(抛出异常)。

声明异常格式:

修饰符 返回值类型 方法名(参数) throws 异常类名1,异常类名2…{ }

使用示例:

public static void read(String path) throws throws FileNotFoundException, IOException { 
if (!path.equals("a.txt")) {
    throw throw new FileNotFoundException("文件不存在异常..."); 
    } 
}

【3.3 】异常第二种处理方式:捕获异常try…catch

捕获异常:Java中对异常有针对性的语句进行捕获,可以对出现的异常进行指定方式的处理。try-catch的方式就是捕获异常。

语法如下:

try{ 
    //编写可能会出现异常的代码
 }catch(异常类型 e){ 
     //处理异常的代码 
 }

注意:try和catch都不能单独使用,必须连用。

使用示例:

public class Test {
    public static void main(String[] args) {
    try {
        //可能产生异常的语句
        read("bb.txt");
        } catch (FileNotFoundException e) {
            //处理异常的方式,如打印日志等等
            System.out.println(e);
        }
    //后续代码....
}

public static void read(String path) throws FileNotFoundException {
    if (!path.equals("test.txt")) {
        throw new FileNotFoundException("文件不存在");
    }
    }
}
发布了220 篇原创文章 · 获赞 93 · 访问量 15万+

猜你喜欢

转载自blog.csdn.net/Weixiaohuai/article/details/104223827
今日推荐