Java 异常总结

一、什么是异常

异常主要是处理编译期不能捕获的错误,出现问题能继续顺利执行下去,而不导致程序终止,确保程序的健壮性。

处理过程 : 产生异常状态时,如果当前的contex不具备处理当前异常的能力,将在heap上new出来一个异常对象,停止当前的执行路线,把产生的异常对象抛给更高层的contex。

二、异常体系

Throable
| –Error
| – Exception
|–RuntimeException

三、异常体系的特点

异常体系中的所有类及建立的对象都具备可抛性
也就是说可以被 throw 和 throws 关键字所操作
只有异常体系具备这个特点

三、throw 和 throws 的用法

throw 定义在函数内,用户抛出对象
throws 定义在函数上,用于抛出异常类,可以抛出多个逗号隔开

四、异常处理

当函数内容有抛出 异常对象,并未进行try处理,必须要在函数上声明,否则编译失败
注意: RuntimeException 除外。也就是说,函数内部如果抛出 RuntimeException 异常,函数上可以不同声明

如果函数声明了异常,调用者 需要进行处理。处理方法可以是 throws 或者 try

五、异常的分类

1、编译时被检测异常 :
该异常在编译时,如果没有处理(没有抛出也没有try),编译失败
该异常被标识,代表可以被处理

2、运行时异常(编译时不检测)

在编译时,不需要被处理,编译器不检查
该异常发生时,建议不处理,让程序停止。需要对代码进行修正

六、异常处理的语句

1、格式

try
{
// 需要被检测的代码
}
catch()
{
  // 处理异常的代码
}
finally
{
// 一定会执行的代码
}

2、三种届结合方式

1> 第一种

try
{
}
catch
{
}

2> 第二种

try
{
}
finally
{
}

3> 第三种

try
{
}
catch
{
}
finally
{
}

注意:
1、 finally 中定义的通常是 关闭资源的代码,因为资源必须释放。
2、finally 只有一种情况不会被执行。当执行到System.exit(0);finally 不会执行。

七、自定义异常

1、定义类继承 Exception 或者RuntimeException,是为了让该自定义类具备可抛性,让该类具备操作异常的共性方法

2、当要定义异常类的信息十,可以使用父类已经定义好的功能,将异常 的异常信息传递给父类的构造函数


class myException exception 
{
   myException (String message)
  {
     super(message);
   }
}

3、自定义异常类的好处 : 按照java的面向对象思恋,将程序中出现特有的问题进行封装。

八、异常的好处

1、将问题进行封装
2、将正常流程代码和问题处理代码进行分离,方便阅读

九、异常的处理原则

1、处理方式有两种: try 或者 throws
2、 调用打抛出异常的功能时,抛出几个,就处理几个。也就是说,一个try对应多个catch
3、多个catch,父类的catch放到最下面(先子类后父类,详细的写在前面)
4、尽量去处理异常,切忌只是简单的调用printStackTrace()去打印输出
5、在多重catch块后面,可以加一个catch(Exception)来处理可能会被遗落的异常
6、当捕获到的异常,本功能处理不了时,可以继续在catch 块继续抛出。

try
{
  throw new Aexception();
}
catch (Aexception e)
{
   throw e;
}

7、当捕获异常,如果该异常处理不了,但并不属于该功能出现的异常,可以将异常转换后,再抛出和该功能相关的异常。 或者异常可以处理,但需要将异常产生后和本功能相关的问题提供出去,让调用者知道并处理,也可以将捕获异常处理后转换新的异常抛出


try
{
   throw new AException();
}

catch(AException a)
{
   // 对
  throw new BException();
}

十、注意事项

参照这里

你可能感兴趣的:(Java,成长之路)