java异常总结

异常:程序运行时出现的不正常情况

对于问题的划分:

1、严重的问题(java用Error类进行描述,一般没有针对性的代码对其进行处理)

2、非严重的问题(java用Exception类进行描述,有针对性的处理方式)

 

异常的处理:

try{

需要被检测的代码(当检测到有异常,则创建对应异常的对象,后面的语句不在执行)

}catch(异常类  e){

处理异常的代码(处理方式)

e.getMessage();//印异常信息

e.toString();//异常类名

e.printStackTrace( );//异常名称,异常信息,异常出现的位置,jvm默认的异常处理机制

finally{

一定会执行的语句

 

对多异常的处理:

1、声明异常时,建议声明为更具体的异常,这样可以更具体的处理

2、对方声明几个异常,就对应几个catch块

如果多个catch块中的异常出现继承关系,父类异常catch块放在最下面

建立进行catch处理时,catch中一定要定义具体的处理方式

不要简单的定义一句e.printStackTrace(  );也不要简单的就书写一条输出语句

 

因为项目中会出现特有的问题,而这些问题并未被java所描述,对于这些特有的问题可以按照java对问题封装的思想,将特有的问题进行自定义的异常封装

自定义异常:

 

自定义异常必须继承Exception

异常体系有一个特点,因为异常类和异常对象都被抛出,他们都具备可抛性,这个可抛性是Throwable这个体系中的独有特点

只有这个体系中的类和对象才可以被throw和throws操作

throws使用在函数上

throw使用在函数内

 

throws后面跟的异常类。可以跟多个,用逗号隔开

throw后跟的是异常对象

 

Exception中有一个特殊的子类异常RuntimeException运行时异常

如果在函数内容抛出该异常,函数上可以不用声明,编译一样通过

如果在函数上声明了该异常,调用者可以不用进行处理,编译一样通过

 

之所以不用在函数声明,是因为不需要让调用者处理,当该异常发生,程序停止,出现了无法继续运算,只有对代码进行修改

自定义异常时:如果该异常的发生,无法再继续进行运算,就让自定义异常继承RuntimeException

 

对于异常分二种:

1、编译时被检测的异常

2、编译时不被检测的异常(运行时异常,RuntimeException)

 

对于异常处理时常见问题:

1、丢失异常(捕获了异常却不作任何处理

1、处理异常。针对该异常采取一些行动,例如修正问题、提醒某个人或进行其他一些处理,要根据具体的情形确定应该采取的动作。再次说明,调用printStackTrace算不上已经“处理好了异常”。

2、重新抛出异常。处理异常的代码在分析异常之后,认为自己不能处理它,重新抛出异常也不失为一种选择。

3、把该异常转换成另一种异常。大多数情况下,这是指把一个低级的异常转换成应用级的异常(其含义更容易被用户了解的异常)。

4、不要捕获异常。

结论一:既然捕获了异常,就要对它进行适当的处理。不要捕获异常之后又把它丢弃,不予理睬。

 

2、不指定具体异常(最常见的情形就是使用catch(Exception ex)语句

在catch语句中尽可能指定具体的异常类型,必要时使用多个catch.不要试图处理所有可能出现的异常

3、占用资源不释放

程序用到了文件、Socket、JDBC连接之类的资源,即使遇到了异常,也要正确释放占用的资源。为此,Java提供了一个简化这类操作的关键词finally.

 

4、不说明异常的详细信息

在异常处理模块中提供适量的错误原因信息,组织错误信息使其易于理解和阅读

 

 

5、过于庞大的try块(把大量的代码放入单个try块

尽量减小try块的体积>

 

6、输出数据不完整(全面考虑可能出现的异常以及这些异常对执行流程的影响。

 

finally中存放一定会被执行的代码(通常用于关闭资源)

 

释放资源

finally
{
if (conn != null) {
try {
conn.close();
}
catch(SQLException sqlex2)
{
System.err(this.getClass().getName() + \".mymethod - 不能关闭数据库连
      接:  \" + sqlex2.toString());
}
}

if (out != null) {
try {
out.close();
}
catch(IOException ioex2)
{
System.err(this.getClass().getName() + \".mymethod - 不能关闭输出文件\"      

       + ioex2.toString());
}
}
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值