💕"有效知识的前提是承认知识边界,承认我们对边界那边的一切无可奉告。"💕
作者:Mylvzi
文章主要内容:JavaSE学习值之--认识异常
一.什么是异常?
异常就是程序在运行的时候产生的不正常的行为 小细节没注意到,发生了小的错误,比如:
1.算数异常
System.out.println(10/0);
2.空指针异常 null.length
int[] arr = null; System.out.println(arr.length);
3.数组越界异常
int[] arr = new int[3]; System.out.println(arr[5]);
可见Java中java中不同类型的异常,都有与其对应的类来进行描述,实际上Java中的异常是一个大的体系
二.异常的体系:
异常它是由编译器识别并给出的,证明其存在于编译器所自带的库文件中,应该是一个类
1. Throwable:
是异常体系的顶层类,其派生出两个重要的子类, Error 和 Exception
2. Error:
指的是Java虚拟机无法解决的严重问题,比如:JVM的内部错误、资源耗尽等,典型代表: StackOverflowError和OutOfMemoryError,一旦发生回力乏术。(递归调用时)
3. Exception:
异常产生后程序员可以通过代码进行处理,使程序继续执行。比如:感冒、发烧。我们平时所说 的异常就是Exception。
三.异常的分类:
主要是分为两大类
- 运行时异常(不受查异常)
RuntimeException()
- 编译时异常(受查异常)
1. RunTimeException 包括他的所有子类
在程序执行期间发生的异常,称为运行时异常,也称为非受检查异常(Unchecked Exception)
注意:
在编写代码过程中出现的语法错误不是运行时异常,比如把main写成了mian,编译器在编译的时候就会报错,这叫错"编译期错误",而运行时异常的产生是所写代码已经经过编译生成.class文件了,再交由JVM运行时产生的错误
补充:RuntimeException的子类
2.编译时异常
在编译的时候就会发生的异常,又称作受查异常(Checked Exception)
比如之前实现的Cloneable接口
class Stu implements Cloneable { String name; int age; public Stu(String name, int age) { this.name = name; this.age = age; } @Override protected Object clone() throws CloneNotSupportedException { return super.clone(); } @Override public String toString() { return "Stu{" + "name='" + name + '\'' + ", age=" + age + '}'; } } public class Test1 { public static void main(String[] args){ Stu stu = new Stu("lvzi",18); Stu stu2 =(Stu) stu.clone(); System.out.println(stu2); }
之前提到,必须在main方法的签名中声明抛出异常,否则会出现异常
这种在编译阶段就报错的异常叫做编译时异常,又叫做受查异常(Checked Exception)
JavaSE学习值之--认识异常(下)+https://developer.aliyun.com/article/1413513