认识异常exception

认识异常exception

  • 异常exception
  • 防御式编程
  • 异常的基本用法
    • 关键字
    • 语法
    • 异常的继承关系
    • 外抛异常 ——throw/throws

异常exception

异常是程序在运行时出现错误时通知调用者的一种机制。
运行时:指的是程序通过编译,已经得到.class文件,再由JVM执行过程中出现的错误。
异常是一种特殊的嘞,继承制Exception的类的子类的对象都是异常。
认识异常exception_第1张图片

防御式编程

错误在代码中是不可避免的,当出现问题就主要两种方式:
LBYL:Look Before You Leap 在操作之前做充分的检查
EAFP:It’s Easier to Ask Forgiveness than Permission. 事后获取原谅比事前获取许可更容易。也就是先操作,遇到问题在处理。

异常的基本用法

关键字

1、try / catch / finally 书写正常逻辑,但可能遇到异常的情况下用
2、throw / throws 用在抛出异常的位置

语法

try{
     
	有可能出现异常的语句;
} [ catch (异常类型  异常对象){
     
}  ...]
[ finally {
     
	异常的出口;
} ]
  • try 代码块中放的是可能出现异常的代码
  • catch 代码块中放的是出现异常后的处理行为
  • finally 代码块中的代码用于处理善后工作,会在最后执行,且一定会执行
  • 其中 catch和finally可更具实际情况选择加还是不加

正常按照try的逻辑顺序走,只要不出错就正常走,一旦出错,则try中后续的步骤不再执行,并且,走到响应的 异常位置执行,finally如果有,则无论正常走完还是异常走完,都得执行

异常的继承关系

异常也是一类对象,只是特殊的对象
遵循引用指向对象的多态规则
认识异常exception_第2张图片
如果异常对象 是NPE的话,那么它的引用类型可以是:Throwable/Exception/RuntimeException/NPE。

如果一个异常在运行期间没有被捕获(catch),则这个异常会导致JVM停止继续工作,并且打出异常信息。
在这里插入图片描述

外抛异常 ——throw/throws

异常都是在运行时的,分为:checked exception和uncheck exception。
checked exception——所有是Exception子类,但又不是RuntimeException子类
uncheck exception——RuntimeException的子类+error的子类

区别在于:
如果一个方法可能抛出check exception
则,在方法签名上要明确的写出 throws + 异常类型
或者 catch掉。
例如:

private static void method() throws MyException{
     
	throw new MyException();
}

private static void method(){
     
	try{
     
		throw new MyException();
	} catch (MyException e){
     
	}
}

而在 unchecked exception中不需要特别加 throws 到方法签名

你可能感兴趣的:(JavaSE,java,exception)