异常

异常不是编译时的错误。
编译时的错误叫error.
异常指Exception
 
异常的分类
Throwable
  1.Error
  2.Exception
    1.RuntimeException
 
1.Error 由java虚拟机生成并抛出,包括动态链接失败、虚拟机错误等, 是系统错误,程序员无法处理这些异常
2.Exception 一般程序中可预知的问题,其产生的异常可能会带来意想不到的结果,因此java编译器要求java程序必须捕获或声明所有的非运行时异常,是程序员可以捕获并处理的异常
3.RuntimeException java虚拟机在运行时生成的异常,如被0除等系统错误、数组下标超范围等,其产生比较频繁,处理麻烦,对程序可读性和运行效率影响太大。因此有系统检测,用户可不做处理,系统将他们交给缺省的异常处理程序( 当然,必要时用户可对其处理)
4.凡是继承自Exception但又不是RuntimeException子类的异常我们都必须得捕捉并进行处理
 
 
什么是异常
异常(Exception)是程序运行过程中发生的事件,该事件可以中断程序指令的正常执行路程。
 
异常的处理机制(重点)
1.当JAVA程序运行时出现问题时,系统会自动检测到该错误,并立即生成一个与该错误对应的异常对象
2.然后把该异常对象提交给java虚拟机
3.java虚拟机会自动寻找相应的处理代码来处理这个异常,如果没有找到,则由java虚拟机做一些简单的处理后,程序被强行终止!
4.程序员可以自己编写代码来捕捉可能出现的异常,并编写代码来处理相应的异常
 
可处理可不处理和必须得进行处理的异常
如果抛出IOException异常要处理否则编译会出错,ArithmeticException不用处理。
RuntimeException可处理可不处理。
如果是Exception的子类不是RuntimeException的子类必须要进行处理。
ArithmeticException是RuntimeException的子类 所以可处理可不处理。
 
异常处理的方式
1.try{}catch{}
2.public void f() throws IOException
throw抛出异常
throws f方法抛出的异常交给OIException进行处理
 
finally
{
无论是否捕捉到异常必须执行的代码;
}
 
异常的优缺点
优点:
强制程序员考虑程序的安全性与健壮性
增强了程序员对程序的可控性
有利于代码的调试
把错误处理代码从常规代码中分离出来
注意:
异常并不一定能够使程序的逻辑更清晰
因为有时我们必须得编写代码捕捉异常,所以可能会导致程序的逻辑非常混乱
异常并不能解决所有的问题
 
注意问题:
  1.所有的catch只能有一个被执行
  2.有可能所有的catch都没有执行
  3.先catch子类异常再catch父类异常
    1.如果先catch父类异常再catch子类异常,则编译时会报错
  4.catch与catch之间是不能有其他代码的
  5.重写方法抛出异常的范围不能大于被重写方法排除的异常范围
原文地址:https://www.cnblogs.com/clear93/p/5805837.html