Java牛角尖【007】:Java中的Error能不能被Catch

网上看到很多朋友说Java中Error是无法Catch到的,而Java中定义的Error类型又很难测试到,那就估且以为确是如此吧。

但是或许大家都有注意,我们时常会看到这样的代码

  1. try{
  2. ...
  3. }catch(Throwable ex){
  4. ...
  5. }

其中catch中直接捕捉的是一个Throwable类,打开继承关系看一下,Exception和Error两个类同样是从Throwable类继承而来,那么,也就是说Error应该是可以被捕捉的,下面写个例子证明一下猜测:

  1. package net.moon.demo.errorcatch;
  2. public class Demo {
  3. /**
  4. * @param args
  5. */
  6. public static void main(String[] args) {
  7. // TODO Auto-generated method stub
  8. try {
  9. throw new MyError("My Error");
  10. } catch (MyError e) {
  11. System.out.println(e.getMessage());
  12. }
  13. }
  14. }
  15. class MyError extends Error {
  16. /**
  17. *
  18. */
  19. private static final long serialVersionUID = 1L;
  20. public MyError() {
  21. super();
  22. // TODO Auto-generated constructor stub
  23. }
  24. public MyError(String message, Throwable cause) {
  25. super(message, cause);
  26. // TODO Auto-generated constructor stub
  27. }
  28. public MyError(String message) {
  29. super(message);
  30. // TODO Auto-generated constructor stub
  31. }
  32. public MyError(Throwable cause) {
  33. super(cause);
  34. // TODO Auto-generated constructor stub
  35. }
  36. }

执行一下以上代码,正如前面的猜测,Error一样是可以捕捉的,运行代码结果为:

  1. My Error

下面给个小例子,来验证一下error的捕获。

复制代码代码如下:
public class TestCatchError extends Error{

private static final long serialVersionUID = -351488225420878020L;

public TestCatchError(){
        super();
    }

public TestCatchError(String msg){
        super(msg);
    }

public static void main(String[] args) {
        try {
            throw new TestCatchError("test catch error");
        } catch (Throwable t) {
            System.out.println("step in the catch ~");
            t.printStackTrace();
        }
    }
}

运行结果:

复制代码代码如下:
step in the catch ~
TestCatchError: test catch error
at TestCatchError.main(TestCatchError.java:23)

Java牛角尖【007】:Java中的Error能不能被Catch的更多相关文章

  1. 谈一谈Java中的Error和Exception

    Error和Exception的联系 继承结构:Error和Exception都是继承于Throwable,RuntimeException继承自Exception. Error和RuntimeExc ...

  2. IDEA中打包Spark项目提示Error:(16, 48) java: -source 1.5 中不支持 lambda 表达式

    在idea中新建了一Spark的项目,在做项目的编译打包的时候,提示如下错误信息: Error:(, ) java: -source 1.5 中不支持 lambda 表达式 (请使用 -source ...

  3. IDEA无法编译java8的lambda表达式提示Error:(16, 48) java: -source 1.5 中不支持 lambda 表达式

    在idea中新建了一个java8的项目,但是写lambda表达式提示语法错误,提示如下错误信息: Error:(16, 48) java: -source 1.5 中不支持 lambda 表达式 (请 ...

  4. idea中解决Error:java: Compilation failed: internal java compiler error的问题

    项目中,使用gradle做项目构建,当我们想更改JDK的版本时,报以下错误: Information:Using javac 1.8.0_111 to compile java sourcesInfo ...

  5. Java中的Error和Exception

    Exception和Error都是继承了Throwable类,在Java中只有Throwable类型的实例才可以被抛出(throw)或者捕获(catch),它是异常处理机制的基本组成类型. Excep ...

  6. Java学习-045-目录中文件拷贝

    挺晚的了,直接上码.敬请各位小主参阅,若有不足之处,敬请指正,非常感谢! 目录文件拷贝源码: /** * <strong>目录拷贝</strong><br> * & ...

  7. web项目引用Java项目,连接报错error HTTP Status 500 - Servlet execution threw an exception

    错误信息 项目背景: 一个web项目引用一个java Project,项目中添加了引用,但是打开页面访问,总报500错误.提示:servlet初始化错误. 环境:Eclipse luna JDK: 1 ...

  8. java.util.regex.PatternSyntaxException: Unexpected internal error near index 1 \ ^

    1 String a = "1991\12\16"; 2 String[] split = a.split("\\"); 3 System.out.printl ...

  9. Java:Linux上java -jar xxx.jar命令执行jar包时出现Error: Invalid or corrupt jarfile xxx.jar解决方案

    背景: 从ftp上上传jar包到linux上,之后在linux上通过ftp命令下载jar包文件,开始执行Java-jar,一直提示错误:Error: Invalid or corrupt jarfil ...

随机推荐

  1. ERROR [localhost-startStop-1] - Context initialization failed org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from ServletContext resource [/WEB-INF/ap

    ERROR [localhost-startStop-1] - Context initialization failed org.springframework.beans.factory.Bean ...

  2. vue 使用 computed 结合 filter 实现数据的的过滤和排序

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  3. 前端最常用的跨域方式--jsonp

    jsonp通过动态创建script标签的方式来实现跨域通信.原理是浏览器允许html标签在不同的域名下加载资源. <script> var script = document.create ...

  4. Linux服务正常启动,Linux服务器能访问,但是外部机器不能访问

    公司用到了jenkins,就在自己虚拟机里面部署了一个jenkins.部署成功之后,在Linux虚拟机里面能正常访问,但是外部真实机却不能访问.当时的第一反应就是觉得应该是权限问题,猜测会不会是jen ...

  5. MIT 6.824学习笔记2 RPC/Thread

    本节内容:Lect 2   RPC and Threads 线程:Threads allow one program to (logically) execute many things at onc ...

  6. 我心中的ASP.NET Core 新核心对象WebHost(一)

    以本系列文章向Fish 前辈的那篇我心中的ASP.NET 核心对象致敬.(虽然不知道前辈现在在干什么).一晃就6年过去了,那首 郝云 的<回到那一天>怎么唱来着? 时光一晃,你就三十了. ...

  7. dubbo构建应用

    1.Dubbo介绍 Dubbo是 阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和Spring框架无缝集成. 2.Dubbo原理 是不是看着 ...

  8. JS高级 — 函数的声明和表达式

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...

  9. elasticsearch 基础 —— Explain、Version、min_score、query  rescorer

    Explain 相关度得分计算: GET /_search { "explain": true, "query" : { "term" : ...

  10. centos7系统中忘记了root管理员账号密码的解决方式(转)

    随着计算机的使用越来越普遍,现在的用户都会有多个密码,不是这软件的密码就是那个的,QQ.邮箱.游戏,还有系统的登录密码!每一个密码都不一样!所以越来越多的密码需要去记住!也因为这样,只要其中一个长时间 ...