资讯专栏INFORMATION COLUMN

一道面试题引发的思考:(2)

stefan / 1134人阅读

摘要:由虚拟机生成并抛出,,属于系统内部错误或者资源耗尽等严重情况,属于需要担负的责任,这一类异常事件是无法恢复或者不可能捕获的,将导致应用程序中断,但是自定义是可以捕获的。

题目

答案:D

分析 Java 异常的结构体系

Throwable 类包含了其线程创建时线程执行堆栈的快照,包含了给出有关错误更多的消息字符串,
有颜色的代表运行时异常,非checked exception,可以不try catch ,则由jvm处理,白色的异常代表checked exceptions必须由try-catch捕获。

非RuntimeException

非runtimeException 一般是外部错误,例如:从文件尾后读取数据,这并不是程序本身的错误,而是应用环境的错误,凡是继承Throwable的,都可以捕获,抛出。

ERROR

Error由虚拟机生成并抛出,,属于JVM系统内部错误或者资源耗尽等严重情况,属于JVM需要担负的责任,这一类异常事件是无法恢复或者不可能捕获的,将导致应用程序中断,但是自定义Error是可以捕获的。

package com.mousycoder.error;

public class MyError extends Error{

    public MyError() {
        super();
    }
    
    MyError(String msg) {
        super(msg);
    }
    
    public static void main(String[] args) {
        
        try {
            throw new MyError("error");
        } catch (Throwable e) {
            System.out.println("catching!");
        }
        
    }
    

}
异常机制

传统异常是由函数返回一个特殊的结果表示,例如: -1表示异常,有时候 -1确是表示正确的值,这样代码可读性差,正确的处理和异常处理代码在一起,异常则由程序员来处理,要求比较高,经过改良之后,程序出现异常,则程序流程发生改变,控制权转到异常处理器,由异常处理器处理,异常处理器也是有很多的,直到找到一个适合的异常处理器,并处理异常。

异常的转译

ERROR到Exception

比如讲SQLException转成DAOException,让异常更加准确的表达

package com.mousycoder.error;

import java.sql.SQLException;

public class DAOException extends Throwable{
    public DAOException() {
        super();
    }
    
    DAOException(String msg,Throwable e){
        super(msg, e);
    }
    
    public static void main(String[] args) throws DAOException {
        SQLException s = new SQLException();
        throw new DAOException("dao异常",s);
    }
    
}

console

Exception in thread "main" com.mousycoder.error.DAOException: dao异常
    at com.mousycoder.error.DAOException.main(DAOException.java:16)
Caused by: java.sql.SQLException
    at com.mousycoder.error.DAOException.main(DAOException.java:15)

Spring中DispatcherServlet的doDispatch()方法将Error转成Exception,挽回错误发生带来的负面影响。

    private void triggerAfterCompletionWithError(HttpServletRequest request, HttpServletResponse response,
            HandlerExecutionChain mappedHandler, Error error) throws Exception, ServletException {

        ServletException ex = new NestedServletException("Handler processing failed", error);
        if (mappedHandler != null) {
            mappedHandler.triggerAfterCompletion(request, response, ex);
        }
        throw ex;
    }

Exception到RuntimeException

将检查异常转成非检查异常,让代码变得优雅,但是增加了系统发生系统的可能性

Error到RuntimeException

代码简洁,统一异常处理

异常链

将异常的原因一个一个串起来,底层信息传给上层,逐级传递

模型:

try {
     lowLevelOp();
    } catch (LowLevelException le) {
     throw (HighLevelException)
      new HighLevelException().initCause(le);
}

感谢您的耐心阅读,如果您发现文章中有一些没表述清楚的,或者是不对的地方,请给我留言,你的鼓励是作者写作最大的动力,
如果您认为本文质量不错,读后觉得收获很大,不妨小额赞助我一下,让我更有动力继续写出高质量的文章。

支付宝

微信

作 者 : @mousycoder

原文出处 : http://mousycoder.com/2015/10/14/thinking-of-interview-question-2/

创作时间:2015-9-22

更新时间:2015-10-14

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/64547.html

相关文章

  • 一道面试引发思考 --- Event Loop

    摘要:想必面试题刷的多的同学对下面这道题目不陌生,能够立即回答出输出个,可是你真的懂为什么吗为什么是输出为什么是输出个这两个问题在我脑边萦绕。同步任务都好理解,一个执行完执行下一个。本文只是我对这道面试题的一点思考,有误的地方望批评指正。 想必面试题刷的多的同学对下面这道题目不陌生,能够立即回答出输出10个10,可是你真的懂为什么吗?为什么是输出10?为什么是输出10个10?这两个问题在我脑...

    betacat 评论0 收藏0
  • 一道前端面试引发思考

    摘要:直接开始题目是厉害了说句实话开发中谁写成这样保证会被打死。不过面试就是面试,有面试官的考量点。官方是这么说的。结果完美,不过小姐姐的意思是数组的方法会自动触发数组的。 直接开始题目是 if(a==1 && a==2 && a==3){ alert(厉害了) } 说句实话开发中谁写成这样保证会被打死。 不过面试就是面试,有面试官的考量点。 我理解的点有两个 1、隐式类型转换 先说...

    gaomysion 评论0 收藏0
  • 一道简单面试引发思考

    摘要:另一个问题,就是我下面要提及的作用域问题,我当时思考的时间太久了这是回忆中的面试题实际略有差异,不纠结了说一下脚本的运行结果引用错误中给出的错误提示。 版权声明:此文首发于我的简书账号人生还有多少个二十年,转载请注明出处。 此处有几百字唠叨:   当天,我早早起床,跨越上百公里,高德导航,路人指点,跌跌撞撞到达招聘会现场,当时已是中午十二点半,吃了午餐(半瓶白开水),开始准备投递...

    wpw 评论0 收藏0
  • 一道面试引发思考 --- 理解 new 运算符

    摘要:首先,我先去上搜索了的定义运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例。 今天看到一道面试题,如下,问: 实例化 Person 过程中,Person返回什么(或者 p 等于什么)? function Person(name) { this.name = name return name; } let p = new Person(Tom); 说实...

    shengguo 评论0 收藏0
  • 一道面试引发思考

    摘要:下面我们来使用面向对象类图这里就不再画了首先面试题中所提到的我们都可以看成类,比如停车场是一个类吧,它里面的车位是一个类吧,摄像头,屏幕。。。 以下是某场的一道面试题(大概): 1、一个停车场,车辆入场时,摄像头记录下车辆信息2、屏幕上显示所接收的车辆的信息情况(车牌号)以及各层车位的车位余量3、停车场一共四层车位,其中的三层都为普通车位,还有一层为特殊车位(体现在停车计费价格上面的不...

    Apollo 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<