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

Java——你真的了解Java异常处理机制

①try:try主要放置可能会产生异常代码如果执行try业务逻辑代码时出现异 常,系统会自动生成一个异常对象,该异常对象被提交给运行环境,这个过程被称为抛出 (throw)异常。...Java环境收到异常对象时,会寻找合适catch本方法或是调用方 法)。...如果 finally中有return或throw,那么将执行这些语句,不会在执行try/catchreturn或throw 句。finally中一般写是关闭资源之类代码。...(包括main)都选择抛出(或者没有合适处理异常方式,即异常类 型不匹配)那么最终将会抛给JVM,就会像我们之前没使用try、catch语句一样。...被一个方法单独抛出受查异常,会给程序员带来非常高额外负担,如果这个方法还有其 他受查异常,那么它被调用是一定已经出现在一个try,所以这个异常只需要另外一个 catch

58710

Java基础系列(三十一):异常

这个时候就会用到我们异常机制来去处理这些问题,它原理是将控制权从错误产生地方转移到能够处理这种情况错误处理器。 Java异常 Java异常是Java提供一种识别及响应错误一致性机制。...(); } } 如果在try语句任何代码抛出一个catch句中说明异常类,那么 程序将跳过try语句其余代码 程序将执行catch句中处理器代码 如果在try语句代码没有抛出任何异常...,那么程序将会跳过catch子句 如果方法任何代码抛出一个catch句中没有声明异常类型,那么这个方法就会立即退出 这里需要注意,我们也可以不对这个异常进行捕获,而是使用throws直接抛出这个异常...如果方法获得了一些本地资源,并且只有这个方法自己知道,又如果这些资源退出方法之前必须被回收,那么就会产生资源回收问题。一种解决方案是捕获并重新抛出所有的异常。...,已下3种情况下回执行finally: 代码没有抛出异常,这时程序会按照 1. 2. 5. 6顺序执行 抛出一个catch句中捕获异常,这时会分为两种情况,第一种情况是:如果catch子句没有抛出异常

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

Java 异常处理 9 个最佳实践

但你也应该在1-2个短句中解释异常原因。这有助于你运营团队了解问题严重性,并且还可以让你更轻松地分析任何服务突发事件。 如果抛出一个特定异常,它类名很可能已经描述了这种错误。...如果catch句中使用 Throwable ,它不仅会捕获所有异常,也将捕获所有的错误。JVM 抛出错误,指出不应该由应用程序处理严重问题。...这通常是由于一个被忽略异常造成。开发者可能会非常肯定,它永远不会被抛出,并添加一个 catch ,不做处理或不记录它。而当你发现这个时,你很可能甚至会发现其中有一个“这永远不会发生”注释。...8、不要记录日志和抛出错误 这可能是该文章中最常被忽略最佳实践。 你可以找到很多中有一个异常被捕获代码片段,甚至是一些代码库,被记录和重新抛出。 ?...发生异常时记录异常可能会感觉很直观,然后重新抛出异常,以便调用者可以适当地处理异常。但它会为同一个异常重复写入多个错误消息。

74720

JavaSE(十一)之异常处理详解

比如说,你代码少了一个分号,那么运行出来结果是提示是错误java.lang.Error;如果你用System.out.println(11/0),那么你是因为你用0做了除数,会抛出java.lang.ArithmeticException...此时,异常处理机制接管程序,并开始寻找一个恰当地方继续执行程序,   这个恰当地方就是异常处理程序或者异常处理器,它任务是将程序从错误状态恢复,以使程序要么换一种方式运行,要么继续运行下去。   ...所以使用这个对象引用调用其他方法之前,要先对它进行检查,可以创建一个代表错误信息对象,并且将它从当前环境抛出,这样就把错误信息传播到更大环境。   ...潜在异常处理器是异常发生时依次存留在调用栈方法集合。当异常处理器所能处理异常类型与方法抛出异常类型相符时,     即为合适异常处理器。...即如果一个方法可能出现受可查异常,要么用try-catch语句捕获,要么用throws子句声明将它抛出,否则会导致编译错误 仅当抛出了异常,该方法调用者才必须处理或者重新抛出该异常。

1.2K90

Java Review(三十二、异常处理

catch句中说明异常类, 那么: 程序将跳过 try语句其余代码。...程序将执行 catch句中处理器代码。 如果在 try 语句代码没有拋出任何异常,那么程序将跳过 catch 子句。...如果方法任何代码拋出了一个 catch句中没有声明异常类型,那么这个方法就会立刻退出(希望调用者为这种类型异常设记了catch 子句。...一种解决方案是捕获并重新抛出所有的异常,这种解决方案并不完美,这是因为需要在两个地方清除所分配资源。一个正常代码;另一个异常代码。...2 ) 抛出一个 catch句中捕获异常。在上面的示例中就是 IOException 异常。在这种情况下,程序将执行 try语句所有代码,直到发生异常为止。

73510

Java 7新特性总结 - Coin项目新语言特性

如果公开方法声明了会抛出一个受检异常,那么这个API使用者肯定已经使用了try-catch-finally来处理这个异常。...但是对于一个方法会抛出非受检异常,也需要在文档中进行说明。 决定是否某个方法处理一个异常需要判断从异常恢复方式是否合理。...比如一个方法要从文件读取配置信息,进行文件操作时可能抛出IOException。当出现异常时候,如果可以采取恢复措施是使用默认值,那么在这个方法处理IOException就是合理。...如果finally语句抛出了异常,那么这个异常会往上传递,而之前try语句那个异常就丢失了。...try语句中出现异常,而释放资源操作正常执行,try语句中异常会被抛出如果try语句和释放资源都出现了异常,那么最终抛出异常是try语句中出现异常,释放资源时出现异常会作为被抑制异常添加进去

60310

札记:Java异常处理

一个方法如果会产生已检查异常,那么通过编译前,就必须在方法声明部分一起使用throws关键字声明将可能抛出这个异常,声明意味着告诉调用方法执行期间可能会抛出对应异常对象。...代码保证无论是否发生异常也会执行,虽然可以选择一个特别设计catch捕获任何异常来完成同样目的,但是代码会很丑陋,需要在try和catch同时包含相应代码。...finally代码是“最后”执行,当发生异常后,catch如果匹配,则对应处理代码会被执行,最后继续执行完finally代码。...catch再次抛出异常 catch代码有可能再次抛出异常,所以有时需要catch内部使用try/catch结构。另一些情况下,我们需要主动catch抛出异常。...又或者自己系统是分层或分模块,这时需要对调用者抛出更有描述意义异常,可以重新catch抛出自己定义了异常类型对象。

1.2K80

深入理解 java 异常处理机制

Java错误通过Error子类描述。 Exception(异常):是程序本身可以处理异常。 Exception 类有一个重要子类 RuntimeException。...捕获异常:方法抛出异常之后,运行时系统将转为寻找合适异常处理器(exception handler)。潜在异常处理器是异常发生时依次存留在调用栈方法集合。...6) try-catch-finally 结构,可重新抛出异常。...即如果一个方法可能出现受可查异常,要么用try-catch语句捕获,要么用throws子句声明将它抛出,否则会导致编译错误 3)仅当抛出了异常,该方法调用者才必须处理或者重新抛出该异常。...五.Java常见异常 Java中提供了一些异常用来描述经常发生错误,对于这些异常,有的需要程序员进行捕获处理或声明抛出,有的是由Java虚拟机自动进行捕获处理

49620

java(3)-深入理解java异常处理机制

Java ,所有的异常都有一个共同祖先 Throwable(可抛出)。...捕获异常:方法抛出异常之后,运行时系统将转为寻找合适异常处理器(exception handler)。潜在异常处理器是异常发生时依次存留在调用栈方法集合。...6) try-catch-finally 结构,可重新抛出异常。...即如果一个方法可能出现受可查异常,要么用try-catch语句捕获,要么用throws子句声明将它抛出,否则会导致编译错误 3)仅当抛出了异常,该方法调用者才必须处理或者重新抛出该异常。...五.Java常见异常 ---- Java中提供了一些异常用来描述经常发生错误,对于这些异常,有的需要程序员进行捕获处理或声明抛出,有的是由Java虚拟机自动进行捕获处理

39750

Java 异常处理 9 个最佳实践

Java ,异常处理是个很麻烦事情。初学者觉得它很难理解,甚至是经验丰富开发者也要花费很长时间决定异常是要处理掉和抛出。 所以很多开发团队约定一些原则处理异常。...使用 Finally 代码 与前面几行 try 代码不同,finally 代码总是会被执行。不管 try 代码成功执行之后还是你 catch 代码处理完异常后都会执行。...但你也应该在1-2个短句中解释异常原因。这有助于你运营团队了解问题严重性,并且还可以让你更轻松地分析任何服务突发事件。 如果抛出一个特定异常,它类名很可能已经描述了这种错误。...如果catch句中使用 Throwable ,它不仅会捕获所有异常,也将捕获所有的错误。JVM 抛出错误,指出不应该由应用程序处理严重问题。...这通常是由于一个被忽略异常造成。开发者可能会非常肯定,它永远不会被抛出,并添加一个 catch ,不做处理或不记录它。而当你发现这个时,你很可能甚至会发现其中有一个“这永远不会发生”注释。

77090

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

每当执行java语句时发生任何错误,都会创建一个异常对象,然后JRE会尝试查找异常处理程序来处理异常。如果找到合适异常处理程序,则将异常对象传递给处理程序代码以处理异常,称为捕获异常。...如果未找到处理程序,则应用程序将异常抛出到运行时环境,JRE将终止该程序。 Java异常处理框架仅用于处理运行时错误,编译时错误不由异常处理框架处理。 2、Java异常处理关键字是什么?...如果一个try捕获了很多异常,你会发现catch代码看起来非常难看,并且主要由冗余代码组成,以记录错误,记住Java 7一个特性是multi-catch。...所以java 7改进之一是try-with-resources,我们可以try语句中创建一个资源并在try-catch中使用它。当执行来自try-catch时,运行时环境会自动关闭这些资源。...当main()方法抛出异常时,Java Runtime终止程序并在系统控制台中打印异常消息和堆栈跟踪。 13、我们可以有一个catch? 我们可以有一个catch,但它是最差编程例子。

88520

Java异常面试问题

每当执行java语句时发生任何错误,都会创建一个异常对象,然后JRE会尝试查找异常处理程序来处理异常。如果找到合适异常处理程序,则将异常对象传递给处理程序代码以处理异常,称为捕获异常。...如果未找到处理程序,则应用程序将异常抛出到运行时环境,JRE将终止该程序。 Java异常处理框架仅用于处理运行时错误,编译时错误不由异常处理框架处理。 2. Java异常处理关键字是什么?...如果一个try捕获了很多异常,你会发现catch代码看起来非常难看,并且主要由冗余代码组成,以记录错误,记住Java 7一个特性是multi-catch。...所以java 7改进之一是try-with-resources,我们可以try语句中创建一个资源并在try-catch中使用它。当执行来自try-catch时,运行时环境会自动关闭这些资源。...当main()方法抛出异常时,Java Runtime终止程序并在系统控制台中打印异常消息和堆栈跟踪。 13. 我们可以有一个catch

98830

【译】11条Java异常处理最佳实践

如果在这一层次不知道如何处理异常,最好将异常重新抛出,由上层决定如何处理异常。...例如,如果一个模块抛出FileNotFoundException和IOException,那么调用这个模块代码最好写两个catch语句分别捕获这两个异常,而不要只写一个捕获Exceptioncatch...语句释放资源 当你代码建立了数据库连接、文件操作符或者其他需要被及时释放系统资源,如果你没有及时释放这些资源,会影响到系统性能。...如果同时抛出两个异常,则第一个异常调用栈会丢失。finally语句中最好只做打印错误信息或者关闭资源等操作,避免finally语句再次抛出异常。...为异常记录合适文档 为应用定义异常定义合适文档,如果你写了一个自定义异常却没有文档,其他开发者会不清楚这个异常含义,为你定义异常配备对应文档是一个非常好习惯。

40140

(25) 异常 (下) 计算机程序思维逻辑

(); } 异常处理机制将根据抛出异常类型找第一个匹配catch,找到后,执行catch代码,其他catch就不执行了,如果没有找到,会继续到上层方法查找。...需要注意是,抛出异常类型是catch声明异常子类也算匹配,所以需要将最具体子类放在前面,如果基类Exception放在前面,则其他更具体catch代码将得不到执行。...重新throw catch处理完后,可以重新抛出异常,异常可以是原来,也可以是新建,如下所示: try{ //可能触发异常代码 }catch(NumberFormatException...为什么要重新抛出呢?因为当前代码不能够完全处理该异常,需要调用者进一步处理。 为什么要抛出一个异常呢?...但其实编程错误也是应该进行处理,尤其是,Java被广泛应用于服务器程序,不能因为一个逻辑错误就使程序退出。

66460

10 Java 异常

但其实编程错误也是应该进行处理,尤其是 Java 被广泛应用于服务器程序,不能因为一个逻辑错误就使程序退出。...释放资源 有时 try-catch句中会占用一些非 Java 资源,如:打开文件、网络连接、打开数据库连接和使用数据结果集等,这些资源并非 Java 资源,不能通过 JVM 垃圾收集器回收,需要程序员释放...throws 与声明方法抛出异常 一个方法如果能够处理异常,则需要捕获并处理。...异常在子类覆盖体现 子类覆盖父类时, 如果父类方法抛出异常,那么子类只能抛出父类异常或该异常子类. 如果父类方法抛出多个异常, 那么子类覆盖方法时,只能抛出父类异常子集....如果父类或接口方法没有异常抛出, 那么子类覆盖方法时,也不可能抛出异常.如果子类方法发生异常,就必须进行 try 处理,绝对不能抛. 一句话就是子类不能抛出更大异常.

74330

java异常处理(学习笔记)

通常应用程序无法处理这些错误,因此应用程序不应该使用catch来捕获Error对象。定义该方法时,也无须在其throws子句中声明该方法可能抛出Error及其任何子类。...(而捕获一种类型异常时,则没有final修饰,因此异常变量可以重新赋值) 访问异常信息 如果程序需要catch访问异常对象相关信息,则可以通过访问catch后异常形参来获得。...如果程序需要合适地方捕获异常并对异常进行处理,则一样可以使用try…catch来捕获Runtime异常。 使用throw抛出异常 当程序出现错误时,系统自动抛出异常。...由于一个业务功能需要由多个对象来共同实现,最终编程模型,很多对象将通过一系列方法调用来实现通信,执行任务。...既然已经捕获到异常,那么catch就应该做一些有用事情——处理并修复这个错误catch整个为空或者仅仅打印出错误信息都是不妥

60311

Java异常知识汇总

使用异常机制它能够降低错误处理代码复杂度,如果不使用异常,那么就必须检查特定错误,并在程序许多地方去处理它,而如果使用异常,那就不必方法调用处进行检查,因为异常机制将保证能够捕获这个错误,并且...,只需一个地方处理错误,即所谓异常处理程序。...try-catchcatch我们可以不需要做任何处理,仅仅只用throw这个关键字将我们封装异常信息主动抛出来。然后通过关键字throws继续抛出该方法异常。...不要在构造函数抛出异常。 如果使用Java7及以后版本,一个catch句中可以捕获多个异常。...减轻finally任务,finally仅仅用来释放资源是最合适。不要在finally中使用return、抛出异常等。 为了给调用者提供尽可能多信息,从而可以更好地避免/处理异常。

49430

Java 异常面试问题与解答

如果找到了合适异常处理程序,则将异常对象传递到处理程序代码以处理异常,称为捕获异常。如果未找到处理程序,则应用程序将异常抛出给运行时环境,并且 JRE 终止程序。...throws:当我们方法抛出任何已检查异常并且不对其进行处理时,我们需要在方法签名时使用 throws 关键字,以使调用方程序知道该方法可能抛出异常。...如果您在单个 try 捕获了很多异常,则您会注意到 catch 代码看起来非常丑陋,并且主要由用于记录错误冗余代码组成,请记住,Java 7 功能之一就是多捕获我们可以单个 catch 捕获多个异常...未经检查异常不需要在程序处理,也不需要在方法 throws 子句中提及。 2....同样,如果方法(foo) throws 子句中声明未经检查异常,则在程序处理该异常不是强制性。 5). 下面的程序有什么问题?

90520

Java基础】异常?NullPointException?世界上怎么会存在这种东西?

异常概念 如果某个方法不能按照正常途径完成任务,就可以通过另一种路径退出方法。在这种情况下会抛出一个封装了错误信息对象。此时,这个方法会立刻退出同时不返回任何值。...如果程序没有处理Checked 异常,该程序在编译时就会发生错误无法编译。这体现了Java 设计哲学:没有完善错误处理代码根本没有机会被执行。...,代码直接跳转到catch句中,走到第6 行时候,异常机制有这么一个原则如果catch 遇到了return 或者异常等能使该函数终止的话那么有finally 就必须先执行完finally 代码里面的代码然后再返回值...var9 = 2; return var9; } } 从编译结果看,先是try语句中进行1/0运算,然后finally语句中重新声明变量var9赋值为2并return var9...所以我们应该注意,为了使代码结构清晰,尽量避免finally语句中抛出异常或者返回结果,避免其覆盖try和catch异常,导致我们无法排查程序具体错误在哪里。 2.

39950

写了挺久代码,却还被异常支配?

通过抛出受检异常,我们应该在一个 catch句中处理该异常,或者将它传播出去,让调用者处理。 ? 运行时异常 和 错误 都属于 非受检可抛出结构。它们都是不需要也不应该被捕获抛出结构。...甚至不要忽略异常,我们有时候会以为这个方法不会抛出异常,而因为异常属于 受检异常,不得已我们需要捕获这个异常,但是又自作聪明得不在 catch 做任何处理操作。 ?...空 catch 会使异常达不到应有的目的 如果我们一定要选择忽略异常,那么明确做法应该是: catch 包含一条注释,说明为什么可以这样做,并且将变量名称命名为 ignored 派生异常 ?...finally代码之后,会将函数栈中保存try return内容返回并终止程序 那么如果在 try 抛出了异常, catch 也有 return,结果又该如何?...还是返回 finally 结果,答案已经揭晓,那么我们来总结一下: 1、不管有没有出现异常,finally中代码都会执行 2、当try和catch中有return时,finally仍然会执行 3、

54710
领券