关于java:Java异常简单介绍

3次阅读

共计 1658 个字符,预计需要花费 5 分钟才能阅读完成。

本文收录在猪哥 GitHub:https://github.com/pig6/Java 中,本我的项目收集一线大厂面试、实战、Java 学习路线等。

一、异样产生的原理

JVM 针对程序运行监测出的异样创立个异样对象,对象蕴含了异样产生的:内容、起因、地位。依据程序逻辑将异样对象层层抛出或者解决。

二、Throwable 体系

1.Error

谬误 Error 个别是指 java 虚拟机相干的问题,如零碎解体、虚拟机出谬误、动静链接失败等,这种谬误无奈复原或不可能捕捉,将导致应用程序中断,通常应用程序无奈解决这些谬误,因而应用程序不应该捕捉 Error 对象,也毋庸在其 throws 子句中申明该办法抛出任何 Error 或其子类。

  1. VirtualMachineError

    • OutOfMemoryError
    • StackOverflowError
  2. LinkageError

    • NoClassDefFoundError
    • NoSuchMethodError
  3. 。。。

2.Exception

1> 运行时异样 RuntimeException:是指“能够防止的异样”,如 null 援用异样,这类异样都是由程序外部起因造成的,是能够防止的,考验开发的严谨性,因而这个问题是咱们作为一名开发必须要防止产生的,再大的公司每年总会有几次事变是因为 NPE 导致的,咱们如果因为这种问题被通报了就是很难堪的事件了(对生产环境肯定要有足够的敬畏心啊)。

常见的运行时异样有以下几种:

  • NullPointerException
  • ClassCastExecption
  • ArithmeticException
  • IndexOutOfBoundsException
  • ClassNotFoundException

2> 非运行时异样 :代表“无奈防止的异样”如 io 异样,往往这类异样是因为内部起因造成的,程序自身无奈保障他们不产生,所以这类异样必须捕捉,这就是咱们在应用 io 资源或者操作线程比方 sleep 的时候必须要捕捉或者抛出的起因。

常见的有:

  • IOException
  • InterruptedException
  • SQLException
  • 自定义的非 RuntimeException

3.Check And UnCheck

1>CheckedException:等价于非运行时异样,要么捕捉,要么抛出,否则编译无奈通过。代表“无奈防止的异样”如 io 异样 往往这类异样是因为内部起因造成的,程序自身无奈保障他们不产生
2>UnCheckedException:包含:Error& 运行时异样

三、办法

  • toString:异样类信息 + 异样信息形容
  • getMessage:异样信息形容
  • printStackTrace:最罕用打印残缺的谬误堆栈信息

四、catch 还是 throw

通常应该捕捉那些晓得如何解决的异样,而将那些不晓得如何解决的异样进行传递。如果想传递一个异样,就必须在办法的申明中增加一个 throws 说明符,以便告知调用者这个办法可能会抛出异样。

五、finally

  1. 无论是否出现异常都会执行
  2. 必须与 try 一起应用
  3. 留神:finally 中有 return 语句永远返回 finally 中的 return,try 块中的 return 不会失效

六、其余

  1. 如果父类抛出了多个异样,子类重写父类办法的时候,抛出和父类雷同的异样 // 是父类异样的子类 // 或者不抛出
  2. 父类办法没有抛出异样,子类重写父类该办法的时候也不能够抛出异样。此时子类产生该异样,只能捕捉解决,不能申明抛出
  3. 应用习惯:

    • 不要抛弃异样,捕捉异样后须要进行相干解决。如果用户感觉不能很好地解决该异样,就让它持续流传,传到别的中央去解决,或者把一个低级的异样转换成利用级的异样,从新抛出
    • catch 语句应该指定具体的异样类型。不能把不该捕捉的异样也捕捉了
    • 在 finally 外面开释资源。如果 finally 外面也会抛出异样,也一样须要应用 try..catch 解决
    • 不要把大量的代码塞在 try…catch 块外面,拆散各个可能出现异常的语句并别离捕捉异样

遗留问题: 编码中是该捕捉 Exception 还是 Throwable 呢?欢送评论区交换!!

正文完
 0