Java 异常
异常
在java.lang.Throwable下分为Error和Exception,其中Error是给sun公司用的,是系统出现的问题,我们主要处理的是Exception
Exception:异常,代表程序可能出现的问题,我们通常会用Exception以及他的子类来封装程序出现的问题.
Exception分为RuntimeException的其他异常
运行时异常:RuntimeException以及其子类,编译阶段不会出现异常提醒,运行时出现的异常,如数组索引越界异常
编译时异常:编译阶段就会出现异常提醒的,如日期解析异常
异常体系的最上层的父类是Exception
编译阶段:Java不会运行代码,只会检查语法是否错误,或者做一些性能的优化,提醒程序员检查本地信息
异常的作用:
查看bug的关键参考信息
作为方法内部的一种特殊返回值,以便通知调用者底层的执行情况
报错,空指针异常,因为创建的引用类型数组未初始化,默认值为Null,需要创建学生对象放进去Student s1 = new Student(),如果用Null调用getName会引发空指针异常
异常的处理方式
JVM默认的处理方式
把异常的名称,原因及出现的位置等信息输出在控制台
程序停止执行,下面的代码不会再执行了
自己处理(捕获异常)
格式:
目的:当代码出现异常时,可以让程序继续往下执行
问题1:如果try中没有遇到问题怎么执行?会把try里面所有的代码全部执行完毕,不会执行catch里面的代码,只有当出现了异常才会执行catch里面的代码
问题2:如果try中可能遇到多个问题,怎么执行?
要写多个catch与之对应
如果我们要捕获多个异常,这些异常如果存在父子关系的话,父类一定要写在下面如果两种异常的处理方式一样:可以在catch中的小括号里面用|同时捕获多个异常(JDK7出现)
问题3:如果try中遇到的问题没有被捕获怎么执行?相当于try...catch的代码白写了,最后还是会交给虚拟机处理,也就是以红色字体打印到控制台并终止执行
问题3:如果try中遇到了问题,那么try下面的其他代码还会执行吗?
不会执行了,而是会直接跳转到对应的catch中执行catch里面的语句体 但是如果没有catch与之匹配,那么还是会交给虚拟机进行处理
异常中的常见方法

printStackTrace是最常用的
抛出处理
throws:写在方法定义处,表示声明一个异常,告诉调用者,使用本方法可能会有哪些异常
编译时异常:必须要写 运行时异常:可以不写
throw:写在方法内,结束方法,手动抛出一场对象,交给调用者,方法中下面的代码不再执行了
小结
虚拟机默认处理异常的方式:把异常信息以红色字体打印在控制台,并结束程序
捕获try...catch:一般在调用处,能让代码继续往下执行
抛出throw throws:在方法中出现异常了,方法就没有继续运行下去的意义了,采用抛出处理,让该方法结束运行并告诉调用者出现了问题
抛出:告诉调用者出错了
捕获:不让程序停止
自定义异常
定义异常类
写继承关系
空参构造
带参构造
意义:就是为了让控制台的报错信息更加见名知意