异常类java.lang.Throwable
异常类的老父亲:(可抛出的)
栗子:
创建异常对象,输出异常:
异常处理方式
可以throws逗号隔开抛出多个异常
catch可以:
- 写多个进行精确异常
- 可以用 逻辑或
编译时、运行时异常
注:
- Error异常不可处理:一个结果,JVM退出
Exception异常可处理 - Exception的直接子类RunTimeException表示运行时异常(UnCheckedException未受检异常,非受控异常)
其他直接子类为编译时异常(CheckedException受检异常、受控异常) - 运行时异常:可以直接抛给JVM,不需要程序员手动处理
编译时异常:必须由程序员手动处理(注意:并不是指编译器语句报错,异常是程序运行时错误,编译报错是语法错误!)
所有的异常都是在运行阶段发生的:
编译时异常未处理的语法报错:
程序员可以选择处理一些运行时异常:
throw:手动抛出个异常
异常对象的两个方法
printStackTrace()信息从上往下读(跳过追踪的sun的信息)
finally
重要:
害,但是又要遵循:
1. finally中的return会覆盖try/catch中的return
2. finally会在try/catch中的return执行之后执行(此时只是执行了return语句,并没有返回运算后的值,而是先把返回的值保存起来,不管finally中执行什么语句,返回值都不会再改变,finally执行完后返回这个值)
所以,面试题:
只有System.exit(0)能治住finally:
final、finally、finalize区别
定义异常类
死的,就只写这两个方法,再不填任何内容,备注好这个异常类的意义就好,以后就直接new这个异常类的对象throw就可以!
重点:异常在实际开发中的应用:课程496【编程思想】
自己定义异常,抛异常、抛出异常、catch异常