当前位置:首页 » 编程语言 » javaerror

javaerror

发布时间: 2023-04-19 14:29:21

java中错误(error)和异常(exception)有什么主要区别

1.如图Exception 和 Error都继承自Throwable类,由jdk api文档中对该类的描述可以知道它是异常处理机制的基本组成类型。可以由虚拟机抛出或者编码者自行抛出(throw)

  • jdk8中文发翻译Throwable类的描述:Throwable类是Java语言中所有错误和异常的Throwable类。 只有作为此类(或其一个子类)的实例的对象由Java虚拟机抛出,或者可以由Java throw语句抛出。 类似地,只有这个类或其子类可以是catch子句中的参数类型。

  • 2.Exception 和 Error 体现了 Java 平台设计者对不同异常情况的分类。Exception 是程序正常运行中,可以预料的意外情况,可能并且应该被捕获,进行相应处理。

    3.Error 是指在正常情况下,不大可能出现的情况,绝大部分的 Error 都会导致程序(比如 JVM 自身)处于非正常的、不可恢复状态。既然是非正常情况,所以不便于也不需要捕获,常见的比如 OutOfMemoryError 之类,都是 Error 的子类。

    4.Exception 又分为可检查(checked)异常和不检查(unchecked)异常,可检查异常在源代码里必须显式地进行捕获处理,这是编译期检查的一部分。前面我介绍的不可查的 Error,是 Throwable 不是 Exception。

    如何处理这些异常?

  • 在现实编程中我们一般使用 try-with-resources 和 multiple catch来进行一些异常处理(便利的特性),在编译时期,会自动生成相应的处理逻辑,比如,自动按照约定俗成 close 那些扩展了 AutoCloseable 或者 Closeable 的对象。

  • try-with-resources 是一种处理Closeable实现类关闭资源的一种写法,简单写了一个例子可以发现其实这就是一中语法,这种语法可以自动编译帮忙编译最后关闭流的操作:

  • public static void main(String[] args) {

    try (BufferedReader br = new BufferedReader(new FileReader("a"));
    BufferedWriter writer = new BufferedWriter(new FileWriter("a"))) {

    // Try-with-resources
    } catch (IOException e) {// Multiple catch
    // Handle it
    }
    }

    编译后class

    public static void main(String[] args) { try {
    BufferedReader br = new BufferedReader(new FileReader("a"));
    Throwable var2 = null; try {
    BufferedWriter writer = new BufferedWriter(new FileWriter("a"));
    Object var4 = null; if (writer != null) { if (var4 != null) { try {
    writer.close();
    } catch (Throwable var15) {
    ((Throwable)var4).addSuppressed(var15);
    }
    } else {
    writer.close();
    }
    }
    } catch (Throwable var16) {
    var2 = var16; throw var16;
    } finally { if (br != null) { if (var2 != null) { try {
    br.close();
    } catch (Throwable var14) {
    var2.addSuppressed(var14);
    }
    } else {
    br.close();
    }
    }

    }
    } catch (IOException var18) {
    ;
    }

    }

    异常处理的两个基本原则

  • 尽量不要捕获类似 Exception 这样的通用异常,而是应该捕获特定异常

    这是因为在日常的开发和合作中,我们读代码的机会往往超过写代码,软件工程是门协作的艺术,所以我们有义务让自己的代码能够直观地体现出尽量多的信息,而泛泛的 Exception 之类,恰恰隐藏了我们的目的。另外,我们也要保证程序不会捕获到我们不希望捕获的异常。比如,你可能更希望 RuntimeException 被扩散出来,而不是被捕获。

  • 不要生吞(swallow)异常。这是异常处理中要特别注意的事情,因为很可能会导致非常难以诊断的诡异情况。

    如果我们不把异常抛出来,或者也没有输出到日志(Logger)之类,程序可能在后续代码以不可控的方式结束。没人能够轻易判断究竟是哪里抛出了异常,以及是什么原因产生了异常。

  • 在写程序时可以通过Objects类(jdk提供),或者断言等提前判断问题,如空指针异常的一些值的处理Objects. requireNonNull(filename);而不是使用之后有问题再系统抛出异常,这可能就会不直观的找到问题所在。即:Throw early, catch late 原则

  • 希望对您有所帮助!~

Ⅱ java监听文件Error listenerStart错误

最近项目中采用开启java线程来监听文件目录 在本地测试正常启动 但是当采用maven中的mvn tomcat:deploy部署到tomcat中时就报如下错误

严重: Error listenerStart : : re StandardContext start 严重: Context [/cms] startup failed e to previous errors

: : DEBUG (cms templet TempletController: ) – >>>>监听停止了!! : : re StandardContext listenerStop 严重: Exception sending context destroyed event to listener instance of class ut il tools ThemePicFileListenerTools java lang NullPointerException陪搏芦答祥 at util tools ThemePicFntextDestroyed(ThemePicFileLis tenerTools java: ) at re StandardContext listenerStop(StandardContext java: ) at re StandardContext stop(StandardContext java: ) at re StandardContext start(StandardContext java: ) at re ContainerBase start(ContainerBase java: )

at re StandardHost start(StandardHost java: ) at re ContainerBase start(ContainerBase java: )

at re StandardEngine start(StandardEngine java: ) at apache catalina startup Embedded start(Embedded java: ) at dehaus mojo tomcat AbstractRunMojo startContainer(AbstractRunMo jo java: )举物 at dehaus mojo tomcat AbstractRunMojo execute(AbstractRunMojo java : ) at apache maven plugin DefaultPluginManager executeMojo(DefaultPlugi nManager java: ) at apache maven lifecycle DefaultLifecycleExecutor executeGoals(Defa ultLifecycleExecutor java: ) at apache maven lifecycle DefaultLifecycleExecutor executeStandalone Goal(DefaultLifecycleExecutor java: ) at apache maven lifecycle DefaultLifecycleExecutor executeGoal(Defau ltLifecycleExecutor java: ) at apache maven lifecycle DefaultLifecycleExecutor executeGoalAndHan dleFailures(DefaultLifecycleExecutor java: ) at apache maven lifecycle DefaultLifecycleExecutor executeTaskSegmen ts(DefaultLifecycleExecutor java: ) at apache maven lifecycle DefaultLifecycleExecutor execute(DefaultLi fecycleExecutor java: ) at apache maven DefaultMaven doExecute(DefaultMaven java: ) at apache maven DefaultMaven execute(DefaultMaven java: ) at apache maven cli MavenCli main(MavenCli java: ) at sun reflect NativeMethodAccessorImpl invoke (Native Method) at sun reflect NativeMethodAccessorImpl invoke(NativeMethodAccessorImpl java: ) at sun reflect DelegatingMethodAccessorImpl invoke(DelegatingMethodAcces sorImpl java: ) at java lang reflect Method invoke(Method java: ) at dehaus classworlds Launcher launchEnhanced(Launcher java: ) at dehaus classworlds Launcher launch(Launcher java: ) at dehaus classworlds Launcher mainWithExitCode(Launcher java: )

at dehaus classworlds Launcher main(Launcher java: )

这个错误让我郁闷了好久 最后找到错误原因 是因为监听的文件夹下面没有内容 maven在发布项目的时候侯就不创建此文件夹 当程序启动的时候 找不到此目录 此时监听就会停止 报以上错误

lishixin/Article/program/Java/hx/201311/26397

Ⅲ java中错误(error)和异常(exception)有什么主要区别

Error(错误)表示系统级的错误和程序不必处理的异常,一般是指与虚拟机相关的问题,是java运行环境中的内部悔码猛错误或者硬件问题。比如:内存资源不足等。对于这种错误,程序基本无能为力,除了退出运行外别无选择,它是由Java虚拟碧桥机抛出的。x0dx0ax0dx0aException(违例)表示需要捕捉或者需要程序进行处理的异常,它处理的是因为程模物序设计的瑕疵而引起的问题或者在外的输入等引起的一般性问题,是程序必须处理的。x0dx0aException又分为运行时异常,受检查异常。x0dx0a运行时异常,表示无法让程序恢复的异常,导致的原因通常是因为执行了错误的操作,建议终止程序,因此,编译器不检查这些异常。x0dx0a受检查异常,是表示程序可以处理的异常,也即表示程序可以修复(由程序自己接受异常并且做出处理),所以称之为受检查异常。

热点内容
压缩柚子 发布:2025-07-03 04:48:16 浏览:181
qq和安卓哪个用的人多 发布:2025-07-03 04:31:37 浏览:654
日本溥仪访问 发布:2025-07-03 04:24:27 浏览:673
java文件遍历 发布:2025-07-03 04:22:22 浏览:140
android画虚线 发布:2025-07-03 04:11:04 浏览:385
系统启动密码怎么取消 发布:2025-07-03 04:08:06 浏览:746
python程序设计第三版课后答案 发布:2025-07-03 03:58:08 浏览:213
socket上传文件 发布:2025-07-03 03:57:24 浏览:895
安卓cleo脚本 发布:2025-07-03 03:41:26 浏览:245
编程器解读 发布:2025-07-03 03:22:49 浏览:24