第三章、异常处理
异常处理在程序运行过程中出现的错误Exception,异常被分成编译时异常
和运行时异常
1. 异常的分类
- 编译时异常
程序在编译过程中发生的异常,必须要进行处理,如果不处理,就会无法正常运行程序。 - 运行时异常
程序在运行时发生的异常,在编译环节没有报错,可以处理也可以不处理,运行时异常可以在编译时被忽略。
补充:
在异常这一章,存在一个概念:
错误
错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽视。例如:当栈溢出时,一个错误就发生了,他们在编译时也检查不到。
无论是运行时异常,还是编译时异常,在最后都需要处理
自定义异常
为什么要自定义异常
程序自己本身的异常类型已无法满足需要的时候,需要自定义异常来满足需求。
自定义异常的前提
-
需要继承异常的父类或者直接子类
- extends Exception
- extends Throwable
- extends RuntimeException
-
需要写两个构造器
- 需要注意的是:无参构造来调用有参构造
异常处理的三种方式
a) throw
public class Students {
public static void main(String[] args) {
//语句块
throw new RuntimeException("这是一个错误");
}
}
b) throws
public class Students {
public static void main(String[] args) throws Exception {
//语句块
}
}
c) try…catch…finally
public class Students {
public static void main(String[] args) {
//语句块
try {
//需要捕获异常的地方
} catch (Exception e) {
e.printStackTrace();
}finally {
System.out.println("这句话一定被执行!");
}
}
}
常见的异常类型
异常 | 描述 |
---|---|
ClassNotFoundException | 应用程序试图加载类时,找不到相应的类,抛出该异常。 |
CloneNotSupportedException | 当调用 Object 类中的 clone 方法克隆对象,但该对象的类无法实现 Cloneable 接口时,抛出该异常。 |
IllegalAccessException | 拒绝访问一个类的时候,抛出该异常。 |
InstantiationException | 当试图使用 Class 类中的 newInstance 方法创建一个类的实例,而指定的类对象因为是一个接口或是一个抽象类而无法实例化时,抛出该异常。 |
InterruptedException | 一个线程被另一个线程中断,抛出该异常。 |
NoSuchFieldException | 请求的变量不存在 |
NoSuchMethodException | 请求的方法不存在 |
NullPointerException | 空指针异常,调用了未经初始化的对象或者是不存在的对象 |
ArrayIndexOutOfBoundsException | 数组下标越界 |
ConcurrentModificationException | 并行修改异常,常在集合iteration遍历时操作remove操作发生 |
NumberFormatException | 数字格式化异常,在装箱与拆箱时调用valueOf(String s)时传入不对应的参数 |
1、常见的异常面试题
1.1 throw和throws的区别
答:
相同点: 都是异常处理的方式,都可以对异常进行处理
不同点:
1、位置:throws是在方法函数头,也就是方法的名字后面;throw是在方法体内部任意位置
2、运行:throws抛出的异常不一定会被执行到,而throw抛出的异常一定会被执行到1.2 异常处理的几种方式
答:异常处理总共有三种方式:throw、throws、try…catch…finally(最常用)
1.3 常见的运行时异常有哪些,请列举
ArrayIndexOutOfBoundsException(数组下标越界异常)、StringIndexOutOfBoundsException(字符串下标越界异常)、CurrentmodificationException(线程操作异常)、NumberFormatException(数字转化异常)、NullPointerException(空指针异常)、ClassCastExcception(类型转化异常)、InterruptedException(中断异常)、SQLException(sql异常)……