5

我的程序正在运行并且全部完成(java)。这是一个简短而简单的求职面试程序。我通过抛出自定义异常来处理诸如不正确的输入格式之类的事情。这是最好的方法还是我应该做一个打印声明?

4

4 回答 4

4

只有当它们将由其他代码处理时,异常才有用。

如果您正在编写一个可重用的库,则无论如何都应该抛出异常。
没有什么比调用第三方库更令人沮丧的了,该库将错误记录到控制台而不是告诉您的代码。

但是,如果您正在编写一个独立的实用程序,打印友好的错误消息比打印丑陋的堆栈跟踪更好。

最灵活的方法是编写抛出异常的可重用代码,然后catch在(或独立部分的其他地方)添加块以main()打印友好消息。

于 2013-09-01T03:33:23.317 回答
1
  • 如果您处理不正确的内联格式,代码是否可读?如果是这样 - 很好,如果不是 - 抛出异常并在其他地方处理它
  • 您是否能够在解析它的地方正确处理不正确的格式,或者一些更通用的方法/类/模块实际上正在调用您的例程并且应该决定做什么?如果是后者 -> 抛出异常

一般来说 - 这取决于。如果您可以“内联”处理这种特殊情况 - 您可以做到(确保它是可读的)。如果不是 - 抛出异常。

于 2013-09-01T03:35:14.320 回答
1

这是关于异常最佳实践的一个很好的参考。你应该确保你遵循这些。

在您的特定情况下(根据您提供的详细信息),用户可能会上传/选择包含错误数据的文件。您的程序应该通过捕获任何基本的 Java 运行时问题并将信息返回给用户来处理这个问题(不是“线程中的异常......”,而是对用户来说更具可读性的东西)。如果您正在检查这些字母字符,那么您应该只处理它(给用户一个错误)而不抛出异常 - 除非这确实是您想要的行为。

于 2013-09-01T03:36:57.357 回答
0

当程序无法以正常正确的方式运行时,会导致异常。

当您从 j2se 发展到 j2ee 时,异常会变得更加复杂并且数量会增加。

对于独立应用程序

  1. 如果您的应用程序只是一个非常简单的计算器,那么您可能会完全忘记异常,因为您的用户输入将被过滤,少数异常之一将被零除
  2. 如果您的应用程序是一个简单的实用工具,例如屏幕截图,那么如果您的文件无法保存(文件 i/o 处例外),那么您只需终止所有任务并向用户显示一些错误消息。
  3. 对于示例2的高级项目,您需要将图像保存在临时文件中,并在问题得到纠正后执行文件保存。

对于企业级的分布式应用程序, 这里涉及事务(相互关联的活动)。这里有时还需要给用户一个简单的消息,并且还需要处理(对相关事务进行必要的更改)异常!

  1. 如果应用程序分布在许多国家/地区,则一个牵引力中的异常需要在另一个国家/地区的另一台服务器中进行更改,这需要可选地结合使用 JMS API 的某些东西(在应用程序内发送消息)

  2. JPA(Java 持久性 API)在发生异常时隐式回滚数据库,并为相关事务提供这样做的便利。但是回滚仍然只影响数据库而不影响实例变量(对象值)

并且在任何时候您都不想让用户阅读您的确切堆栈跟踪,该堆栈跟踪在行号处显示错误.....

于 2013-09-01T04:07:36.167 回答