首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

9种处理Java异常的最佳实践

但是这一次,您没有将信息提供给您的方法的调用者。每个必须了解该日志文件或您的监视工具中报告该异常时发生的情况的人都可以阅读该异常的消息。...但是它将为同一异常写入多个错误消息。...如最佳做法4中所述,异常消息应描述异常事件。堆栈跟踪会告诉您在哪个类,方法和行中引发了异常。 如果需要添加其他信息,则应捕获异常并将其包装在自定义异常中。但是请确保遵循最佳实践9。...", e); } } 因此,仅在要处理它时才捕获异常。否则,请在方法签名中指定它,然后让调用者来处理它。...执行此操作时,请确保将原始异常设置为原因。该异常类提供了接受一个特定的构造方法的Throwable作为参数。否则,您将丢失堆栈跟踪和原始异常的消息,这将使分析导致您的异常的异常事件变得困难。

46510

Java面试集锦(一)之Java异常

如果未找到处理程序,则应用程序将异常抛出到运行时环境,JRE将终止该程序。 Java异常处理框架仅用于处理运行时错误,编译时错误不由异常处理框架处理。 2....throws:当我们在方法中抛出任何已检查的异常而不处理它时,我们需要在方法签名中使用throws关键字让调用者程序知道该方法可能抛出的异常。...void printStackTrace() - 此方法将堆栈跟踪信息打印到标准错误流,此方法已重载,我们可以将PrintStream或PrintWriter作为参数传递,以将堆栈跟踪信息写入文件或流。...当main方法抛出异常时会发生什么 当main()方法抛出异常时,Java Runtime终止程序并在系统控制台中打印异常消息和堆栈跟踪。 11....我们永远不应该有空的catch块,因为如果异常被该块捕获,我们将没有关于异常的信息,并且它将成为调试它的噩梦。应该至少有一个日志记录语句来记录控制台或日志文件中的异常详细信息。 12.

1K40
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    有效处理Java异常的三个原则,你知道吗?

    在有效使用异常的情况下,异常类型回答了“什么”被抛出,异常堆栈跟踪回答了“在哪“抛出,异常信息回答了“为什么“会抛出,如果你的异常没有回答以上全部问题,那么可能你没有很好地使用它们。...每一种都描述了一类特定的I/O错误:分别是文件丢失,异常文件结尾和错误的序列化对象流.异常越具体,我们的程序就能更好地回答”什么出了错”这个问题。 捕获异常时尽量明确也很重要。...应当捕获具体的异常并且用"人话"给用户提示确切的信息。不过,异常堆栈倒是可以在你的日志文件里打印。记住,异常和堆栈信息是用来帮助开发人员而不是用户的。...提早抛出 异常堆栈信息提供了导致异常出现的方法调用链的精确顺序,包括每个方法调用的类名,方法名,代码文件名甚至行数,以此来精确定位异常出现的现场。 ?...通过逐步回退跟踪堆栈信息并检查代码,我们可以确定错误原因是向readPreferences()传入了一个空文件名参数。

    1.6K10

    十大Docker记录问题

    容器将日志写入控制台(stdout / stderr),而Docker Logging Drivers将日志转发到目的地,而不是将日志写入文件。...Docker日志命令仅适用于json文件日志驱动程序 默认的日志记录驱动程序“json-file”将日志写入本地磁盘,json文件驱动程序是唯一与“docker logs”命令并行工作的驱动程序。...Docker日志记录驱动程序不支持多行日志,如错误堆栈跟踪 当我们考虑日志时,大多数人会想到简单的单行日志,比如Nginx或Apache日志。但是,日志也可以跨越多行。...例如,异常跟踪通常跨越多行,因此为了帮助Logstash用户,我们已经共享了如何使用Logstash处理堆栈跟踪。...Docker Daemon崩溃如果流利的守护进程已经消失并且缓冲区已满 另一种情况是,当远程目标不可访问时,日志记录驱动程序会导致问题 - 在此特定情况下,日志记录驱动程序会抛出导致Docker守护程序崩溃的异常

    2.7K40

    Java 异常处理的 20 个最佳实践,你知道几个?

    e) { //错误方式 LOGGER.error("Some information", e); throw e; } 正如上面的代码中,记录和抛出异常会在日志文件中产生多条日志消息...这个原则隐含地说,你将更有可能把它放在低级方法中,在那里你将检查单个值是否为空或不适合。而且你会让异常堆栈跟踪上升好几个级别,直到达到足够的抽象级别才能处理问题。...("Using retry sector B"); 不要像上面这样做,对多个 LOGGER.debug() 调用使用多行日志消息可能在你的测试用例中看起来不错,但是当它在具有 100 个并行运行的线程的应用程序服务器的日志文件中显示时...,所有信息都输出到相同的日志文件,即使它们在实际代码中为前后行,但是在日志文件中这两个日志消息可能会间隔 100 多行。...应该这样做: LOGGER.debug("Using cache sector A, using retry sector B"); 将所有相关信息尽可能地传递给异常 有用的异常消息和堆栈跟踪非常重要,

    82620

    Java 异常面试问题与解答

    void printStackTrace() –此方法将堆栈跟踪信息打印到标准错误流,此方法已重载,我们可以传递 PrintStream 或 PrintWriter 作为参数,以将堆栈跟踪信息写入文件或流...例如,如果您使用 FileReader 读取文件,则可能会抛出该文件FileNotFoundException,我们必须将其在 try-catch 块中捕获,或再次将其抛出给调用方方法。...当 main()方法引发异常时,Java Runtime 将终止程序并在系统控制台中打印异常消息和堆栈跟踪。 13.我们可以有一个空的捕获块吗?...我们永远不应该有空的 catch 块,因为如果异常被该块捕获,我们将没有有关该异常的信息,调试它将是一场噩梦。至少应该有一条日志记录语句,以将异常详细信息记录在控制台或日志文件中。...异常的代价很高,因此仅在有意义时才抛出异常。否则,您可以捕获它们并返回null或不响应。 15.以下程序有什么问题,我们该如何解决? 在这里,我们将研究与 Java 异常相关的一些编程问题。 1).

    93020

    Java异常面试问题

    如果未找到处理程序,则应用程序将异常抛出到运行时环境,JRE将终止该程序。 Java异常处理框架仅用于处理运行时错误,编译时错误不由异常处理框架处理。 2. Java中的异常处理关键字是什么?...throws:当我们在方法中抛出任何已检查的异常而不处理它时,我们需要在方法签名中使用throws关键字让调用者程序知道该方法可能抛出的异常。...void printStackTrace() - 此方法将堆栈跟踪信息打印到标准错误流,此方法已重载,我们可以将PrintStream或PrintWriter作为参数传递,以将堆栈跟踪信息写入文件或流。...在三者之中,最后只涉及到java异常处理。 12. 当main方法抛出异常时会发生什么? 当main()方法抛出异常时,Java Runtime终止程序并在系统控制台中打印异常消息和堆栈跟踪。...我们永远不应该有空的catch块,因为如果异常被该块捕获,我们将没有关于异常的信息,并且它将成为调试它的噩梦。应该至少有一个日志记录语句来记录控制台或日志文件中的异常详细信息。 14.

    1K30

    干货分享|Java异常经典14问,你都能答对吗?

    如果未找到处理程序,则应用程序将异常抛出到运行时环境,JRE将终止该程序。 Java异常处理框架仅用于处理运行时错误,编译时错误不由异常处理框架处理。 2、Java中的异常处理关键字是什么?...throws:当我们在方法中抛出任何已检查的异常而不处理它时,我们需要在方法签名中使用throws关键字让调用者程序知道该方法可能抛出的异常。...void printStackTrace() - 此方法将堆栈跟踪信息打印到标准错误流,此方法已重载,我们可以将PrintStream或PrintWriter作为参数传递,以将堆栈跟踪信息写入文件或流。...在三者之中,最后只涉及到java异常处理。 12、当main方法抛出异常时会发生什么? 当main()方法抛出异常时,Java Runtime终止程序并在系统控制台中打印异常消息和堆栈跟踪。...我们永远不应该有空的catch块,因为如果异常被该块捕获,我们将没有关于异常的信息,并且它将成为调试它的噩梦。应该至少有一个日志记录语句来记录控制台或日志文件中的异常详细信息。

    90820

    一文看懂 .NET 的异常处理机制、原则以及最佳实践

    StackTrace 包含用来确定错误位置的堆栈跟踪(当有调试信息如 PDB 时,这里就会包含源代码文件名和源代码行号) InnerException 包含内部异常信息 Source 这个属性包含导致错误的应用程序或对象的名称...只是注意如果要重新抛出异常,请使用 throw; 语句或者将原有异常作为内部异常。...尽量写全四个构造函数,前三个方便使用,最后一个用于序列化异常(新的异常类应可序列化)。 finally 异常堆栈跟踪 堆栈跟踪从引发异常的语句开始,到捕获异常的 catch 语句结束。...有两种方法来避免异常: 先判断再使用。 例如读取文件之前,先判断文件是否存在;例如读取文件流时先判断是否已到达文件末尾。...(例如保存用户的文档数据) AppDomain.FirstChanceException 应用程序域中的第一次机会异常 我们前面说过,一个异常被捕获时,其堆栈信息将包含从 throw 块到 catch

    87841

    Py异常处理

    # 另一端关闭时尝试写入管道或试图在已关闭写入的套接字上写入 | | ±- ConnectionAbortedError # 连接尝试被对等方中止 | | ±- ConnectionRefusedError...该参数是可选的,如果不提供,异常的参数是"None"。最后一个参数是跟踪异常对象,也是可选的(在实践中很少使用)。...把异常保存到一个日志文件中,来分析这些异常 import traceback try: print ('here1:',5/2) print ('here2:',10/5) print...在上面的例子中,把异常保存到一个日志文件(log.txt)。 采用traceback模块查看异常。发生异常时,Python能“记住”引发的异常以及程序的当前状态。...Python还维护着traceback(跟踪)对象,其中含有异常发生时与函数调用堆栈有关的信息。

    1.5K30

    【Python系列】Python中打印详细堆栈信息的技巧

    它提到,文件包含漏洞通常发生在 PHP 等脚本语言中,当开发者在引入文件时没有对文件名进行充分的校验,就可能导致意外的文件泄露或恶意代码注入。...使用traceback模块 traceback模块是 Python 标准库中专门用于处理异常堆栈跟踪的工具。它提供了丰富的函数来获取、格式化和打印异常信息。...1.1 traceback.print_exc() 当程序抛出异常时,traceback.print_exc()函数可以直接打印异常信息和堆栈跟踪,无需手动处理异常对象。...使用logging模块 对于大型项目或者需要将错误信息记录到日志文件的场景,logging模块提供了更加强大的日志管理功能。 3.1 配置日志 首先,需要配置日志系统,包括日志级别、日志文件名等。...这个方法会自动记录异常的堆栈跟踪,无需手动格式化。

    9810

    扒虫篇-崩溃日志解读及Crash收集

    通常,上面有每个正在执行线程的完整堆栈跟踪信息,所以你能从中了解到闪退发生时各线程都在做什么,并分辨出闪退发生在哪个线程上。 有几种方法可以从设备上获取崩溃日志。...,下次程序启动时,将崩溃信息作为日志发送给开发者。...将崩溃信息写入本地,APP再次启动时,将崩溃信息上传到我们的服务器。...信号量抛出后,可以被多个捕获crash的工具获取到,然后取当前的堆栈信息, 再利用该堆栈信息与原app的dsym文件进行比对, 就可以找到崩溃的代码行。...这种情况最苦逼也是最难找到bug所在,这种情况下,用@try @catch将main函数包裹起来,这样会抛出异常堆栈信息等,或者通过添加全局breakPoint来追踪bug。

    2.8K10

    【8】进大厂必须掌握的面试题-Java面试-异常和线程

    而异常是由于输入错误或人为错误等原因而发生的情况。例如,如果指定的文件不存在,则将抛出FileNotFoundException。...void printStackTrace() –此方法将堆栈跟踪信息打印到标准错误流,此方法已重载,我们可以传递PrintStream或PrintWriter作为参数,以将堆栈跟踪信息写入文件或流。...当一个方法被声明为已同步时,线程将保持该方法对象的监视器。如果另一个线程正在执行同步方法,则该线程将被阻塞,直到该线程释放监视器。 Q12。我们可以在单个try块下写入多个catch块吗?...public StackTraceElement [] getStackTrace()–此方法返回一个数组,其中包含堆栈跟踪中的每个元素。...void printStackTrace() –此方法将堆栈跟踪信息打印到标准错误流。 Q14。什么是Java中的OutOfMemoryError?

    56010

    【8】进大厂必须掌握的面试题-Java面试-异常和线程

    而异常是由于输入错误或人为错误等原因而发生的情况。例如,如果指定的文件不存在,则将抛出FileNotFoundException。...void printStackTrace() –此方法将堆栈跟踪信息打印到标准错误流,此方法已重载,我们可以传递PrintStream或PrintWriter作为参数,以将堆栈跟踪信息写入文件或流。...当一个方法被声明为已同步时,线程将保持该方法对象的监视器。如果另一个线程正在执行同步方法,则该线程将被阻塞,直到该线程释放监视器。 Q12。我们可以在单个try块下写入多个catch块吗?...public StackTraceElement [] getStackTrace()–此方法返回一个数组,其中包含堆栈跟踪中的每个元素。...void printStackTrace() –此方法将堆栈跟踪信息打印到标准错误流。 Q14。什么是Java中的OutOfMemoryError?

    67610

    Python “异常处理机制” ——Python面试100道实战题目练习,巩固知识、检查技术、成功就业

    题目35: 在Python中,可以使用raise语句在else子句中抛出异常。 题目36: 异常传播的过程中,如果某个异常被捕获并处理,那么它的堆栈跟踪信息会被清除。...题6: 答案:A 解析:在try…except…else结构中,else块仅在try块成功执行且没有异常发生时执行。...题17: 答案:B 解析:如果try块中引发了一个异常,但没有对应的except块来处理它,程序将终止,并显示一个错误跟踪(包括堆栈跟踪和异常信息)。...是异常的堆栈跟踪信息。...题目16: 正确 解析:traceback模块提供了打印和处理异常的堆栈跟踪信息的功能。在捕获异常后,可以使用traceback模块的相关函数来打印异常的详细堆栈跟踪信息。

    8110

    01.崩溃捕获设计实践方案

    有些bug如果找不到,那么思考能否上传info日志,通过技术埋点去排查崩溃链路问题。 1.4 设计目标 能够准确将崩溃日志写到本地文件 能够捕获到崩溃日志,然后把它通过io流写入到file文件中。...写入的崩溃信息,带有完整的异常堆栈链信息,还有一些基础的手机和App属性。...MonitorFileLib 02.App崩溃流程 2.1 为何崩溃推出App 线程中抛出异常以后的处理逻辑 一旦线程出现抛出异常,并且在没有捕捉的情况下,JVM将调用Thread中的dispatchUncaughtException...文件定入dropbox中,一般只有anr时,会将traces文件通过该参数传递进来者,其他类型都不传. //6.如果是crash类型,会传入crashInfo,此时将其写入dropbox中...每个元素表示单独的一个【堆栈帧】。 所有的堆栈帧(堆栈顶部的那个堆栈帧除外)都表示一个【方法调用】。堆栈顶部的帧表示【生成堆栈跟踪的执行点】。

    44420
    领券