草庐IT

java - 是否每个异常都有一个必需的 try-catch?

coder 2023-08-28 原文

一个简单的问题,我找不到答案。 Java 中的每个异常都需要使用 try-catch 吗?还是仅针对 FileNotFoundException?

很多异常(IndexOutOfBoundException、ArithmeticException、IlligalArgumentException、NullPointerException)都说他们不需要异常,但 FileNotFoundException 需要)...我找不到答案,哪些需要,哪些不需要尝试捕捉。

最佳答案

并非绝对需要为异常设置一个 try/catch block 。相反,您可以将它们throw 给能够正确处理异常的人。

有两种异常:已检查和未检查。 Checked异常可以被认为是编译器发现的异常,编译器知道它有可能发生,所以你需要catchthrow 它。例如,打开一个文件。它有可能会失败,并且编译器知道这一点,因此您不得不捕获抛出可能的IOException

未经检查的异常可以被认为是有可能发生的异常,但根据您的代码,编译器不知道。换句话说,这是一个编程错误。例如,如果您正在接受用户输入并希望输入一个数字,而用户输入了您不希望输入的内容(例如字符串),您的程序将抛出一个 NumberFormatException。您可以预测这些情况并放置 try/catch 以在它们发生之前尝试避免它们。很少有人会添加 throws NullPointerExceptionthrows NumberFormatException(或抛出任何其他未经检查的异常)。这是允许的,但显式创建该异常很奇怪,大多数人会说这是糟糕的编码风格。

请注意,所有已检查的建议必须被捕获或扔给可以处理它的东西;如果你不这样做,你的程序将无法编译。如果你把它扔给无法处理的东西,那么你的程序很可能会在它发生时崩溃。

另请注意,未经检查的异常(例如:在运行时发生的异常,通常是由于错误的用户输入或诸如此类的原因)通常也会使您的程序崩溃。因此,当某些事情可能出错时使用 try/catch 通常是个好主意,但您不必

另外值得注意的是,虽然已检查异常是 Exception 的子类,未检查异常是 RuntimeException 的子类,但 RuntimeException 本身是 Exception 的子类。这意味着如果您真的想要,单个 try {} catch (Exception e) {} 将捕获您的程序可能抛出的每一个异常。诚然,这被认为是一种可怕的处理异常的方法,您应该分别捕获每个异常,以便单独处理它们。请尽量不要使用它。

关于java - 是否每个异常都有一个必需的 try-catch?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29851253/

有关java - 是否每个异常都有一个必需的 try-catch?的更多相关文章

  1. ruby-on-rails - 如何验证 update_all 是否实际在 Rails 中更新 - 2

    给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru

  2. ruby - 使用 Vim Rails,您可以创建一个新的迁移文件并一次性打开它吗? - 2

    使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta

  3. ruby-on-rails - Rails - 一个 View 中的多个模型 - 2

    我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何

  4. ruby-on-rails - 渲染另一个 Controller 的 View - 2

    我想要做的是有2个不同的Controller,client和test_client。客户端Controller已经构建,我想创建一个test_clientController,我可以使用它来玩弄客户端的UI并根据需要进行调整。我主要是想绕过我在客户端中内置的验证及其对加载数据的管理Controller的依赖。所以我希望test_clientController加载示例数据集,然后呈现客户端Controller的索引View,以便我可以调整客户端UI。就是这样。我在test_clients索引方法中试过这个:classTestClientdefindexrender:template=>

  5. ruby - 检查数组是否在增加 - 2

    这个问题在这里已经有了答案:Checktoseeifanarrayisalreadysorted?(8个答案)关闭9年前。我只是想知道是否有办法检查数组是否在增加?这是我的解决方案,但我正在寻找更漂亮的方法:n=-1@arr.flatten.each{|e|returnfalseife

  6. ruby-on-rails - 如果 Object::try 被发送到一个 nil 对象,为什么它会起作用? - 2

    如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象

  7. ruby - 为什么 SecureRandom.uuid 创建一个唯一的字符串? - 2

    关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion为什么SecureRandom.uuid创建一个唯一的字符串?SecureRandom.uuid#=>"35cb4e30-54e1-49f9-b5ce-4134799eb2c0"SecureRandom.uuid方法创建的字符串从不重复?

  8. java - 等价于 Java 中的 Ruby Hash - 2

    我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/

  9. ruby-on-rails - Rails - 乐观锁定总是触发 StaleObjectError 异常 - 2

    我正在学习Rails,并阅读了关于乐观锁的内容。我已将类型为integer的lock_version列添加到我的articles表中。但现在每当我第一次尝试更新记录时,我都会收到StaleObjectError异常。这是我的迁移:classAddLockVersionToArticle当我尝试通过Rails控制台更新文章时:article=Article.first=>#我这样做:article.title="newtitle"article.save我明白了:(0.3ms)begintransaction(0.3ms)UPDATE"articles"SET"title"='dwdwd

  10. ruby - 检查字符串是否包含散列中的任何键并返回它包含的键的值 - 2

    我有一个包含多个键的散列和一个字符串,该字符串不包含散列中的任何键或包含一个键。h={"k1"=>"v1","k2"=>"v2","k3"=>"v3"}s="thisisanexamplestringthatmightoccurwithakeysomewhereinthestringk1(withspecialcharacterslike(^&*$#@!^&&*))"检查s是否包含h中的任何键的最佳方法是什么,如果包含,则返回它包含的键的值?例如,对于上面的h和s的例子,输出应该是v1。编辑:只有字符串是用户定义的。哈希将始终相同。 最佳答案

随机推荐