一、异常
Throwable是所有错误和异常的超类
--Error--严重问题,不需要处理
--Exception--RuntimeException 在编译期不检查的,出现问题再回来修改
--Exception--非RuntimeException 在编译期就必须处理,不然编译不通过。
二、JVM的默认处理方案
默认处理方案会在程序出现异常的地方直接结束。
三、异常处理之try-catch
两种异常处理方案:try--catch;throws;
3.1 try catch
格式:
try{
需要处理异常的语句//如果这里出现了xx异常,就会在堆中new xx();如果与catch中的异常类匹配则执行下面的语句
}catch(异常类 对象){
匹配这个异常类后,会执行的语句
}
输出了catch后面的执行语句,且执行了“结束”
四、Throwable类
Throwable是所有异常的祖宗类,因此所有异常都可以调用他里面的方法。
- e.getMessage()输出了出现异常的原因
- e.toString输出了异常原因+异常类名
- e.printStackTrace()输出了异常原因+异常类名+异常出现的位置
五、运行时异常和编译时异常的区别
运行时异常:非受检异常,编译时不会报错,是runtimeException的子类
编译时异常:受检异常,必须处理,不然编译不成功,是Exception的子类,除了runtimeException类及其子类的所有异常
运行时异常:
编译时异常:
parseException
解决方案:
红线是说他这里有可能出错。
六、异常处理之throws
例:
throws只是抛出异常,并且找到异常就结束程序。不会继续往后执行。
要想继续执行还是需要try catch。
意思就是在方法定义时抛出后,谁调用这个方法,谁就用try catch异常。
七、自定义异常
注意继承自Exception,是编译时异常。
如果继承自runtimeException,是运行时异常。
定义一个无参构造和一个有参构造,且有参构造里继承父类
throw xxException//这里用的是throw 不是throws
表示当分数大于100或小于0,就必须抛出这个异常,(must throw)
然后由于此自定义异常是编译时异常,那么的方法名括号后需要throws xxException
使用这个带自定义异常的方法
控制台的输出:异常名称+异常位置(没有异常原因)
异常原因需要在throw new xxException("异常原因");这里加入
控制台的输出:异常原因+异常名称+异常位置
八、throw和throws的区别
最主要的就是
throw 在方法体里面,一定会抛出异常
throws 在方法名后面,只有出现异常了才会抛出异常。
- ScoreException 定义异常,编译/运行时异常都一样
Teacher 定义方法带自定义异常
编译时异常需要在方法名括号后面throws xxException 运行时异常不需要 两者写异常原因都是在throw new xxException("异常原因")
Test 测试方法
编译时异常需要在main方法括号后 throws xxException 且使用带编译时异常的方法需要try catch 运行时异常均不需要
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。