首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不同的异常报告

不同的异常报告
EN

Stack Overflow用户
提问于 2015-11-24 09:47:11
回答 1查看 1.8K关注 0票数 2

我只是在考虑java异常。有许多不同的类型,他们都为自己的部分工作。我好奇的是如何处理它们。例如

代码语言:javascript
复制
try
{
    //Protected code
}catch(ExceptionName e1)
{
    //Catch block
}

在catch blok中,有多种方法来报告异常。我已经找到了几个,但我猜想周围还有更多的东西:

  • 用于调试的System.err.println(e1);
  • system.println.out(e1);只查看本地验证的错误。
  • e1.printStackTrace();只需查看错误
  • 如果我是正确的,那么Logger.getLogger(classname.class.getName()).log(Level.SEVERE, null, e1);级别可以在调试、信息和错误方面发生变化。

你为什么要选择一个而不是另一个?我能想到的只是它报告的信息?因此,对于短期错误,您只需打印异常,同时寻找实际的问题,您将使用更大的东西。如果你知道会有一个例外,但不认为这很重要,可以扔了吗?

异常处理是测试代码的好工具吗?它能代替Black-Box-testing吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-24 11:08:10

您的问题主要是关于日志记录,根据您的需求和应用程序的复杂性,有几种方法可以做到这一点。它们之间存在着明显的差异,例如:

System.out.println()使用Scanner类的PrintStream out静态对象将传递的参数打印到控制台。println()是PrintStream类的一种方法。绝对不是一个合适的测井解决方案。

System.println.out()我不认为这样的方法存在于系统类中,请参阅文档

System.err.println()确实存在,并再次成为PrintStream类的静态对象。这是标准错误输出流,它已经打开,正在等待接收应该引起用户注意的数据。

如果您正在使用控制台,您将无法看到err.println()和之间的区别。您显然可以配置它们,以便err.println()输出文件中的所有错误。

Java的Serializable类扩展了Throwable并实现了接口。Exception继承Throwable类中的所有方法:

  • getCause() -如果原因不存在,则返回Throwable或null
  • getMessage() -返回此可抛出的详细信息的字符串消息
  • getStackTrace() -返回throwable的StackTraceElement[]
  • printStackTrace() -有以下两个变体

getStackTrace()允许您对堆栈跟踪进行编程访问。

返回堆栈跟踪元素数组,每个元素表示一个堆栈帧。数组的第零元素(假设数组的长度为非零)表示堆栈的顶部,这是序列中的最后一个方法调用。通常,这是创建和抛出该throwable的点。数组的最后一个元素(假设数组的长度为非零)表示堆栈的底部,这是序列中的第一个方法调用。

printStackTrace()或printStackTrace(PrintStream s) --第一个没有PrintStream参数的在标准错误输出流中打印堆栈跟踪(正确猜测!那是err.println()).如果希望在文件中打印堆栈跟踪,则传递指向文件或其他目的地的printStackTrace()方法PrintStream。

好了,现在回到伐木上。有几个日志记录框架允许您记录不同严重程度的数据。例如,您有一个企业应用程序,您希望基于

  • 严重(最高)
  • 警告
  • 信息
  • 其他职等

日志框架可以用来做很多事情,下面列出了几个:

  • 记录简单文本消息
  • 日志级别以筛选不同的日志消息。
  • 日志类别
  • 日志文件旋转
  • 配置配置文件,具有装载信任的能力。
  • 巨大的列表继续

根据您正在开发的应用程序的需求,您可以使用大量日志框架:

  1. Log4j
  2. Java日志API
  3. 请参阅这里这里中的更多内容

其中一些日志记录框架有基准测试结果,例如,请参阅这里来比较Log4j、Logback和Java。

根据项目的需要、其复杂性和您希望实现的日志记录级别,您可以选择很多选项。

代码语言:javascript
复制
Exception handling good for testing? No. 
Is logging good for testing? No.

异常处理是指当您处理意外情况时。例如,您期待整数输入,然后得到字符串。如果不处理这样的情况,执行就会中断。因此,您需要编写try和catch块来捕获这样的异常,然后警告用户,s/他应该只输入一个整数。就像这样,有许多异常和异常会导致代码的执行停止。如果用户能够停止代码的执行,那么这不是一个好的程序,因此,您需要异常处理才能处理任何类型的用户、输入的数据等。

您不能使用异常处理进行测试,但它确实对您有所帮助。多么?异常处理可以与测试框架一起使用,以帮助您手动抛出不同类型的异常,然后使用异常处理代码来处理它。

日志记录不能用于测试,但可以与测试一起使用。您可以在测试框架(如JUnit )中使用日志框架来运行测试,并记录在测试执行期间发生的所有事件。每次执行测试时,您都可以配置日志框架来创建一组特殊的日志文件。

如果您希望进行日志记录,并希望将来成为一名程序员(您可能已经这样做了),那么您肯定需要使用测试框架进行测试,使用日志记录框架和异常处理来处理异常。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33890248

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档