当前位置: 安卓之星 -> Java开发 -> java异常处理机制原理

java异常处理机制原理

作者:网络 发表于: 2016-10-18 点击: 371 次

异常基本概念

Java中,异常对象都是派生于Throwable类的实例,分为error和exception,其中error不常用,面试中也不常涉及,这里主要讲exception。
exception分为两种:RuntimeException和其他异常。
常见的RuntimeException异常:
错误的类型转换;
数组访问越界;
访问空指针。
其他典型异常:
试图在文件尾部的后面读取数据;
试图打开一个不存在的文件;
试图通过给定的字符串查找Class对象,但该字符串表示的类不存在。
如果出现RuntimeException异常,那么一定是自己的程序出现了问题;而程序本身没有问题,但由于像I/O错误这类导致的异常属于其他异常。
未检查异常:error类或RuntimeException类异常。
已检查异常:所有其他异常。

自定义异常

继承Exception类或Exception的子类

try/catch/finally

编程中建议独立使用try/catch和try/finally语句块。
public static String testfunction()
    {
        File file = new File(“E:\\test\\java\\2.json”);

        FileInputStream filein = null;
        BufferedReader reader = null;
        try 
        {
            try 
            {
                filein = new FileInputStream(file);
                reader = new BufferedReader(new InputStreamReader(filein));
                StringBuffer strBuf = new StringBuffer();
                String str = “”;
                while((str = reader.readLine()) != null)
                {
                    strBuf.append(str);
                }
                return strBuf.toString();
            } 
            finally 
            {
                if(filein != null)
                {
                    filein.close();
                }
                if(reader != null)
                {
                    reader.close();
                }
            }
        } catch (FileNotFoundException e) {
            //打印异常日志
            e.printStackTrace();
            return “”;
        } catch (IOException e) {
            //打印异常日志
            e.printStackTrace();
            return “”;
        }
    }

这种设计方式不仅清楚而且在finally语句块中的异常也会在外层报告。内层的try语句块只有一个职责,就是确保关闭输入流,而外层的try语句块也只有一个职责,就是确保报告出现的错误。
通过上面的代码可以看出,如果try块抛出异常,而且close方法也会抛出异常,那么就会使得代码显得臃肿,一个很好的解决方法是使用带资源的try语句。
Java 7 的编译器和运行环境支持新的 try-with-resources 语句
public static String testfunction2()
    {
        File file = new File(“E:\\test\\java\\2.json”);

        try(FileInputStream filein = new FileInputStream(file);
                BufferedReader reader = new BufferedReader(new InputStreamReader(filein)))
        {
            StringBuffer strBuf = new StringBuffer();
            String str = “”;
            while((str = reader.readLine()) != null)
            {
                strBuf.append(str);
            }
            return strBuf.toString();
        }
        catch (Exception e) {
            //打印异常日志
            e.printStackTrace();
            return “”;
        }
    }

数据流会在 try 执行完毕后自动被关闭,前提是,这些可关闭的资源必须实现 java.lang.AutoCloseable 接口。
异常的规则:“早抛出,晚捕获”。

相关文章

相关文章

赶快留言冒泡

  • 评论 (0)
  • 引用通告 (0)
目前还没有任何评论.
目前还没有任何Trackbacks和Pingbacks.
吐个泡浮上去.