zoukankan      html  css  js  c++  java
  • 《Java核心技术》第七章读书笔记(异常处理)

    第七章 异常断言日志

    所有的异常(Error和Exception)都是由Throwable继承而来。

    异常分类

    Java将派生于Error类或RuntimeException类的所有异常称之为非受查异常,其他的称之为受查异常。

    声明受查异常

    以下4种情况应该抛出异常

    1. 调用一个抛出受查异常的方法,比如FileInputStream构造器
    2. 程序运行过程中发现错误,并且利用throw语句抛出一个受查异常。
    3. 程序出现错误的非受查异常,例如索引越界。
    4. java虚拟机和运行时库出现的内部错误。

    对于受查异常,必须告诉程序员有可能抛出异常,如果没有处理器捕获这个异常,当前执行的线程就会结束。

    不需要声明java的内部错误,即从Error集成的错误,任何程序代码都具有哪些抛出异常的潜能,而我们对其没有任何控制能力。同样也不应该声明从RuntimeException继承的那些非受查异常。比如索引越界。

    这些错误完全在我们控制之下,我们应该花费时间在程序的修正上而不是错误发生的可能性上。

    总之一个方法必须声明所有可能抛出的受查异常,而非受查异常要么不可控制,要么就应该避免发生,如果方法没有声明所有可能发生的受查异常,编译器就会发出一个错误。

    创建异常类

    例如,定义一个派生于IOException的类,习惯上,定义的类应该包含两个构造器,一个是默认的构造器,另一个是带有详细描述信息的构造器。

    class FileFormatException extends IOException{
    	public FileFormatException(){};
    	public FileFormatException(String grip){
    		super(grip)
    	}
    }
    

    在方法中抛出自定义的异常即可。

    再次抛出异常与异常链

    catch字句可以抛出一个异常,目的是改变异常的类型。

    try{access the database}
    catch(SQLException e){
    	Throwable se = new ServletException("database error")
    	se.initCause(e);
    	throw se
    }
    
    当捕获到异常时
    Throwable e = se.getCause()获取原始异常,而且不会丢失原始异常细节。
    
    • 在try-catch-finally中,finally会在return之后继续执行。

    带资源的try语句

    try(Scanner in = new Scanner(new FileInputStream("xxxxx")),"utf-8"){
    	while (in.hasNext()){
    		doSometh;
    	}
    }
    

    这个块正常退出时,或者存在一个异常时,都会调用in.close()方法。

  • 相关阅读:
    SD卡性能测试
    在程序内动态获取svn版本号
    在SharePoint 2010程序中使用Session
    图片预读
    CSS图片垂直居中方法整理集合 !(常见问题解答)
    cpld的入门交流之二:秒信号发生器
    基于json数据的jQuery无限级下拉菜单插件
    MySQL 按指定字段自定义列表排序
    10张图让你更了解博客
    IE6 CSS bug: position:relative变成了absolute
  • 原文地址:https://www.cnblogs.com/jimmyhe/p/13909342.html
Copyright © 2011-2022 走看看