异常
指的是程序在编译和执行的过程中,出现的非正常的情况;
当然语法错误并不属于错误
异常体系
最大的Throwable;
分为两个:Error Exception
Error
严重级别问题
常见的
堆内存溢出
栈内存溢出
Exception
分为两个子类
RuntimeException
运行时异常
除了RuntimeException外的子类
编译时异常

例如,我现在这里将日期进行实例化,但是date进行实例化的时候及其有可能出错,所以需要将其抛出
所以需要提前将异常进行处理

异常的默认处理流程
向上抛出
package com.ithemia;public class yichang {public static void main(String[] args) {System.out.println("开始");methon();System.out.println("结束");}private static void methon() {System.out.println(10/0);}}
强制终止!!!!
现在,我调用了一个methon的方法,出现了除以0的问题,这个时候就会创建一个aRITHMETIC类似的*异常对象*,向上一级抛出,上一级为main,main继续上上一级抛出,也就是jvm即java虚拟机,java虚拟机将异常展示在你的面前

try…catch
好处:异常对象可以被捕获,后续的代码可以继续执行
格式:
try{可能出现异常的代码
}
catch(异常名称 对象名){}
执行流程:
1.执行try中的代码,看是否有异常对象产生
2.没有:catch就不会捕获,后续代码继续执行
3.有:catch捕获异常对象,执行catch{}中的处理方案,方便后续代码执行

多个异常,就可以写多个catch,最先执行的异常会被执行
也可以之间抓一个大的catch(Exception e)
实际上就是多态 Exception e=new ArithmeticException();
但是不推荐,因为太过于笼统了如果要捕获多个异常,最大的异常一定要放到最后ctrl+alt+t选中这一行,被包裹
throws
抛出异常
Date date=sdf.parse("fs00");
让方法throws ParseException();
但仅仅是声明异常,会将错误抛给上一级,但实际上并没有进行处理!!!
选择
需要将问题暴露出来,用throws
不需要用try catch

也可以写e.getMessage();
获得异常对象的你自己创建的那个问题的注释
运行时异常在子类中是不用进行抛出的
throw
用来抛出对象的
自定义异常
自定义编译时异常,继承Exception
运行时异常,继承RuntimeException
实际上就是创建一个类,去继承我需要的那个类,在编译或者运行的时候,实际上抛出的就是我自己写的那个类,那么就可以实现我自己写的异常去进行抛出
异常的细节
String getMessage();返回你写的错误的问题
如果是自定义的,返回的实际上也就是你的自己写的构造函数的错误的答案pribtStackTrace();
展示遗产的全部的异常的信息,第几行,什么类型的错误等
继承关系中的异常的处理
子类重写父类的方法的时候,不可以抛出父类没有的异常,或者比父类更大的异常,
你爹都没有,你为什么能有?=================================err