运行时异常:指编译器不要求强制处理的异常。一般是指编程时的逻辑错误。java.lang.RuntimeException类及它的子类都是运行时异常。
下面举例几种常见的运行时异常
ArrayIndexOutOfBoundsException
int arr[] = new int[]{1, 2, 3}
for(int i = 0; i < 4; i++){
System.out.println(arr[i]);// 数组角标越界异常
}
数组角标越界异常:指数组的索引取值超过了本身的数组长度,就会造成越界异常
NullPointerException
int arr[] = new int[] {1, 2, 3};
System.out.println(arr[2]);
arr = null;
System.out.println(arr[2]);//空指针异常
空指针异常:当取一个null的的索引或调用null的方法和属性时就会产生空指针异常,因为null本身就是空的,调用它的方法或属性是不存在的。
NumberFormatException
String str = "123";
str = "abc";
Integer i = new Integer(str);// 数字格式转化错误
数字格式转化异常:当用包装类转化一个由数字组成的字符串时,由于字符串不是由数字组成,所以不知道该转化成什么数字,从而抛出异常
ClassCastException
Person p = new Person();
Student s = (Student)p;//实例类型转换异常
class Person{}
class Student extends Person{}
实例类型转换异常:当一对具有子父类关系的类进行类型转换时,如果父类的对象不是多态,那么强制转换为子类类型就会报错,因为并不具有子类的扩展功能
ArithmeticException
int a = 10 / 0
算术异常:指一些计算上的错误,零不能做除数
InputMismatchException
Scanner scanner = new Scanner(System.in);
int score = scanner.nextInt();
System.out.println(score);
scanner.close();
输入不匹配异常:指在输入过程中,没有输入匹配的数据类型而产生的异常。
编译时异常:指编译器要求必须处置的异常。即程序在运行时由于外界因素造成的一般性异常。编译器要求Java程序必须捕获或声明所有编译时异常
FileNotFoundException
// 文件未找到异常
File file = new File("hello.txt");
FileInputStream fileInputStream = new FileInputStream(file);
文件未找到异常:当文件不存在时出现的异常
异常体系结构
java.lang.Throwable
* |-----java.lang.Error:一般不编写针对性的代码进行处理。
* |-----java.lang.Exception:可以进行异常的处理
* |------编译时异常(checked)
* |-----IOException
* |-----FileNotFoundException
* |-----ClassNotFoundException
* |------运行时异常(unchecked,RuntimeException)
* |-----NullPointerException
* |-----ArrayIndexOutOfBoundsException
* |-----ClassCastException
* |-----NumberFormatException
* |-----InputMismatchException
* |-----ArithmeticException