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

一文读懂 JAVA 异常处理

如果一个方法中代码抛出受查异常,则该方法必须包含异常处理,即 try-catch 代码块,或在方法签名中用 throws 关键字声明该方法可能抛出受查异常,否则编译无法通过。...可见,即使 catch 中包含了 return 语句,finally 子句依然执行。...【强制】 捕获异常是为了处理,不要捕获了却什么都不处理而抛弃之,如果不想处理,请 将该异常给它调用者。最外层业务使用者,必须处理异常,将其转化为用户可以理解 内容。...3) 集合里元素即使 isNotEmpty,取出数据元素可能为 null。 4) 远程调用返回对象时,一律要求进行空指针判断,防止 NPE。...编译器不会对运行时异常进行检测,没有 try-catch,方法签名中也没有 throws 关键字声明,编译依然可以通过。如果出现了 RuntimeException, 那一定是程序员错误。

1K20

【148期】最最最全面的Java异常面试及解答

虽然 Java 编译器不会检查运行时异常,但是我们可以通过 throws 进行声明抛出,可以通过 try-catch 对进行捕获处理。如果产生运行时异常,则需要通过修改代码来进行避免。...特点: Java 编译器检查。...编译器检查此类异常,也就是说当编译器检查到应用中某处可能此类异常时,将会提示你处理本异常——要么使用try-catch捕获,要么使用方法签名中用 throws 关键字抛出,否则编译不通过。...非受检异常 编译器不会进行检查并且不要求必须处理异常,也就说当程序中出现此类异常时,即使我们没有try-catch捕获,也没有使用throws抛出该异常,编译正常通过。...理论上,编译器看任何代码都不顺眼,都觉得可能有潜在问题,所以你即使对所有代码加上try,代码在运行期时只不过是在正常运行基础上加一层皮。

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

Java异常面试题(2020最新版)

虽然 Java 编译器不会检查运行时异常,但是我们可以通过 throws 进行声明抛出,可以通过 try-catch 对进行捕获处理。如果产生运行时异常,则需要通过修改代码来进行避免。...特点: Java 编译器检查。...编译器检查此类异常,也就是说当编译器检查到应用中某处可能此类异常时,将会提示你处理本异常——要么使用try-catch捕获,要么使用方法签名中用 throws 关键字抛出,否则编译不通过。 ...非受检异常  编译器不会进行检查并且不要求必须处理异常,也就说当程序中出现此类异常时,即使我们没有try-catch捕获,也没有使用throws抛出该异常,编译正常通过。...理论上,编译器看任何代码都不顺眼,都觉得可能有潜在问题,所以你即使对所有代码加上try,代码在运行期时只不过是在正常运行基础上加一层皮。

74230

【Java ——异常机制详解】

运行时异常特点是Java编译器不会检查,也就是说,当程序中可能出现这类异常,即使没有用try-catch语句捕获,也没有用throws子句声明抛出会编译通过。...这种异常特点是Java编译器检查,也就是说,当程序中可能出现这类异常,要么用try-catch语句捕获,要么用throws子句声明抛出,否则编译不会通过。...通常,应该捕获那些知道如何处理异常,将不知道如何处理异常继续传递下去。传递异常可以在方法签名处使用 throws 关键字声明可能抛出异常。...所以一般都是捕获异常或者再往上。有时我们从 catch 中抛出一个异常,目的是为了改变异常类型。...5.如果所有的栈帧被弹出,仍然没有处理,则给当前Thread,Thread则会终止。6.如果当前Thread为最后一个非守护线程,且未处理异常,则会导致JVM终止运行。

5500

Java8编程思想之Java异常机制最佳实践

catcher() 抛出 BaseException,即使实际上抛出了更具体 DerivedException。...这个 cause 就用来表示原始异常,这样通过把原始异常传递给新异常,使得即使在当前位置创建并抛出了异常,能通过这个异常链追踪到异常最初发生位置。...你会发现,RuntimeException(或任何从继承异常)是一个特例。对于这种异常类型,编译器不需要异常说明,其输出被报告给了 System.err。...编译时唯一要检查是异常说明是不是前后一致;比如,如果函数或方法会抛出某些异常,那么重载版本或者派生版本必须抛出同样异常。...但是,我看到以及我使用一些动态(类型检查)语言亲身经历告诉我,这些好处实际上是来自于: 不在于编译器是否强制程序员去处理错误,而是要有一致、使用异常来报告错误模型。

1.1K20

Java异常机制最佳实践

“作弊”地方 可以声明方法将异常,实际上却不抛出。编译器相信了这个声明,并强制此方法用户像真的抛出异常那样使用这个方法。...catcher() 抛出 BaseException,即使实际上抛出了更具体 DerivedException。...现在所有 Throwable 子类在构造器中都可接收一个 cause 对象作为参数,表示原始异常,这样通过把原始异常传递给新异常,使得即使在当前位置创建并抛出了异常,能通过这个异常链追踪到异常最初发生位置...编译时唯一要检查是异常说明是不是前后一致;比如,如果函数或方法会抛出某些异常,那么重载版本或者派生版本必须抛出同样异常。...但是,我看到以及我使用一些动态(类型检查)语言亲身经历告诉我,这些好处实际上是来自于: 不在于编译器是否强制程序员去处理错误,而是要有一致、使用异常来报告错误模型。

93030

Lombok注解@SneakyThrows,让代码更优雅

由lombok生成代码不会忽略,包装,替换或以其他方式修改抛出已检查异常; 只是伪造了编译器。...当您想要选择退出已检查异常机制时,常见用例围绕两种情况: 一个不必要严格接口,例如Runnable- 无论是否传播出你run()方法,检查与否,都将被传递给Thread未处理异常处理程序...前者强制要求抛出方法声明throws,调用者必须显示去处理这个异常。设计目的是为了提醒开发者处理一些场景中必然可能存在异常情况。比如网络异常造成IOException。...大部分情况下异常,我们都是一路往外了事。(强制处理我处理不了啊!臣妾做不到)所以渐渐java程序员处理Exception常见手段就是外面包一层RuntimeException,接着往上丢。...泛型最后存储为字节码时并没有泛型信息。这样写只是为了骗过javac编译器,源码中注释有解释。 - END -

11.7K40

Java异常体系中秘密

由于IOException属于checked异常,调用者必须通过try-catch处理他们;又因为IO操作完成后需要关闭资源,然而关闭资源close()方法抛出checked异常,因此需要使用try-catch...那么,编译器在编译时,自动添加finally代码块,并将close()函数资源释放代码加入finally代码块中。从而提高代码可读性。...当执行finally块中conn.close()方法时,向调用者一个异常。此时,由try块抛出异常将会被覆盖,main方法中仅打印finally块中异常。...要解释这个问题,先来看一个例子,请问下面代码中test()函数返回什么结果?...即使被调用方法返回空集合或者空对象,对调用 者来说,并非高枕无忧,必须考虑到远程调用失败,运行时异常等场景返回 null 情况。

1K100

详解Java中checked异常和unchecked异常

异常对象包含着错误详细信息,包括错误类型和该错误发生时系统状态。创建一个异常对象并把传递给运行时系统就叫做抛出了一个异常(throwing an exception)。...你获取到一个编译时异常信息——Unhandled exception type FileNotFoundException(未处理异常,类型为FileNotFoundException)。...一旦执行了任何有bug代码就会出现这种异常。 编译器不会强制要求方法声明由unchecked异常实现抛出异常。通常,这样方法都不会去声明这种异常。...举个例子,像内存溢出(OutOfMemoryError)错误,即使我们捕获到了,不能处理,你可能会说,那我手动进行一次垃圾收集不可以吗?答案是:不可以!...方法应该首先尝试在遇到异常时就处理,当在方法内不可能处理时,再抛出这个异常。 定义一个异常签名最好方法是把声明和方法名相近。

3.5K32

深入理解java异常处理机制

这种异常特点是Java编译器检查,也就是说,当程序中可能出现这类异常,要么用try-catch语句捕获,要么用throws子句声明抛出,否则编译不会通过。...运行时异常特点是Java编译器不会检查,也就是说,当程序中可能出现这类异常,即使没有用try-catch语句捕获,也没有用throws子句声明抛出会编译通过。...程序会在throw语句后立即终止,后面的语句执行不到,然后在包含所有try块中(可能在上层调用函数中)从里向外寻找含有与其匹配catch子句try块。...如果抛出了检查异常,则还应该在方法头部声明方法可能抛出异常类型。该方法调用者必须检查处理抛出异常。        ...如果所有方法都层层上获取异常,最终JVM进行处理,处理很简单,就是打印异常消息和堆栈信息。如果抛出是Error或RuntimeException,则该方法调用者可选择处理该异常。

66720

Java异常类

这种异常特点是Java编译器检查,也就是说,当程序中可能出现这类异常,要么用try-catch语句捕获,要么用throws子句声明抛出,否则编译不会通过。...运行时异常特点是Java编译器不会检查,也就是说,当程序中可能出现这类异常,即使没有用try-catch语句捕获,也没有用throws子句声明抛出会编译通过(  如果所有方法都层层上获取异常...也就是说,当一个方法选择不捕捉可查异常时,必须声明将抛出异常,因为Java编译器检查,也就是说,当程序中可能出现这类异常,要么用try-catch语句捕获,要么用throws子句声明抛出,否则编译不会通过...如果抛出了检查异常,则还应该在方法头部声明方法可能抛出异常类型。该方法调用者必须检查处理抛出异常。        ...如果所有方法都层层上获取异常,最终JVM进行处理,处理很简单,就是打印异常消息和堆栈信息。如果抛出是Error或RuntimeException,则该方法调用者可选择处理该异常。

41910

浅谈 Java 中 AutoCloseable 接口

当一个资源类实现了该接口close方法,在使用try-with-resources语法创建资源抛出异常后,JVM自动调用close 方法进行资源释放;当没有抛出异常正常退出try代码块时自动调用...3、 改成Closeable接口,可以 接着我们将Resource类上AutoCloseable接口改为Closeable(如下),此时需要将close方法异常签名改成IOException,否则编译不通过...注意下面代码主动抛出IOException目的为满足异常签名,否则idea提示要删掉异常签名,变成无异常签名。...关系,发现除了继承关系,Closeable只是将close方法异常签名变得稍微具体了,从Exception变为IOException。...当然存在例外情况,可以在兄弟代码块中抛出两个独立异常,特别是在try-with-resources语句try块和编译器生成finally块(用于关闭资源)中。

1.8K30

Java异常处理最佳实践

不仅仅初学者很难理解,即使一些有经验开发者需要花费很多时间来思考如何处理异常,包括需要处理哪些异常,怎样处理等等。这也是绝大多数开发团队都会制定一些规则来规范进行异常处理原因。...Exception 类提供了特殊构造函数方法,接受一个 Throwable 作为参数。否则,你将会丢失堆栈跟踪和原始异常消息,这将会使分析导致异常异常事件变得困难。...【强制】捕获异常是为了处理,不要捕获了却什么都不处理而抛弃之,如果不想处理,请将该异常给它调用者。最外层业务使用者,必须处理异常,将其转化为用户可以理解内容。...这些情况,即使代码编译期是正确,但在代码运行期时,抛出NoSuchMethodError。...3) 集合里元素即使isNotEmpty,取出数据元素可能为null。 4) 远程调用返回对象时,一律要求进行空指针判断,防止NPE。

70650

异常处理升级版

但是天有不测风云,在小王去上班时,可能遇到一些异常情况,比如小王车子出了故障,小王只能改为步行.  异常指程序运行中出现不期而至各种状况,如:文件找不到、网络连接失败、非法参数等。  ...对于设计合理应用程序来说,即使确实发生了错误,本质上不应该试图去处理它所引起异常状况,因为这是超出程序处理能力。  ...3)异常给了方法调用者,谁调用这个方法谁就负责处理这些异常      3.2、异常捕获 当我们调用了一个方法,该方法在声明时候抛出了异常,那么我们作为方法调用者就必须去处理这些被抛出异常...如果抛出了检查异常,则还应该在方法头部声明方法可能抛出异常类型。 该方法调用者必须检查处理抛出异常。...如果所有方法都层层上获取异常,最终JVM进行处理,处理很简单,就是打印异常消息和堆栈信息 public static void test() throws Exception

87190

深入理解java异常处理机制

这种异常特点是Java编译器检查,也就是说,当程序中可能出现这类异常,要么用try-catch语句捕获,要么用throws子句声明抛出,否则编译不会通过。...运行时异常特点是Java编译器不会检查,也就是说,当程序中可能出现这类异常,即使没有用try-catch语句捕获,也没有用throws子句声明抛出会编译通过。...程序会在throw语句后立即终止,后面的语句执行不到,然后在包含所有try块中(可能在上层调用函数中)从里向外寻找含有与其匹配catch子句try块。...如果抛出了检查异常,则还应该在方法头部声明方法可能抛出异常类型。该方法调用者必须检查处理抛出异常。        ...如果所有方法都层层上获取异常,最终JVM进行处理,处理很简单,就是打印异常消息和堆栈信息。如果抛出是Error或RuntimeException,则该方法调用者可选择处理该异常。

89540

JAVA中异常处理机制及异常分类

检查异常CheckedException一般是外部错误,这种异常都发生在编译阶段,Java编译器强制程序去捕获此类异常,即会出现要求你把这段可能出现异常程序进行try catch,该类异常一般包括几个方面...:  位置不同:throws用在函数上,后面跟是异常类,可以跟多个;而throw用在函数内,后面跟是异常对象。...throws表示出现异常一种可能性,并不一定会发生这些异常;throw则是抛出了异常,执行throw则一定抛出了某种异常对象。...;总之,未检查异常不需要try…catch…或throws 机制去处理   CheckedException:定义方法时必须声明所有可能抛出exception; 在调用这个方法时,必须捕获checked...如果方法没有声明所有的可能发生已检查异常,编译器就会给出错误信息

61220

深入理解 java 异常处理机制

这种异常特点是Java编译器检查,也就是说,当程序中可能出现这类异常,要么用try-catch语句捕获,要么用throws子句声明抛出,否则编译不会通过。...运行时异常特点是Java编译器不会检查,也就是说,当程序中可能出现这类异常,即使没有用try-catch语句捕获,也没有用throws子句声明抛出会编译通过。...程序会在throw语句后立即终止,后面的语句执行不到,然后在包含所有try块中(可能在上层调用函数中)从里向外寻找含有与其匹配catch子句try块。   ...如果抛出了检查异常,则还应该在方法头部声明方法可能抛出异常类型。该方法调用者必须检查处理抛出异常。...如果所有方法都层层上获取异常,最终JVM进行处理,处理很简单,就是打印异常消息和堆栈信息。如果抛出是Error或RuntimeException,则该方法调用者可选择处理该异常。

50120

java异常处理(较详细)「建议收藏」

大家好,又见面了,我是你们朋友全栈君。 在使用计算机语言进行项目开发过程中,即使程序员把代码写得尽善尽美,在系统运行过程中仍然遇到一些问题,因为很多问题不是靠代码能够避免。...2.编译时异常 是指编译器要求必须处置异常。即程序在运行时由于外界因素造成一般性异常。 编译器要求Java程序必须捕获或声明所有编译时异常。...如果一个方法内抛出异常, 该异常对象会被给调用者方法中处理。 如果异常没有在调用者方法中处理, 继续被给这个调用方法上层方法。 这个过程将一直继续下去, 直到异常被处理。...不捕获异常时情况 前面使用异常都是RuntimeException类或是子类,这些类异常特点是:即使没有使用try和catch捕获, Java自己能捕获,并且编译通过( 但运行时会发生异常使得程序运行终止...在方法声明中用throws语句可以声明抛出异常列表, throws后面的异常类型可以是方法中产生异常类型, 可以是父类。

1.8K10

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

这种异常特点是Java编译器检查,也就是说,当程序中可能出现这类异常,要么用try-catch语句捕获,要么用throws子句声明抛出,否则编译不会通过。...运行时异常特点是Java编译器不会检查,也就是说,当程序中可能出现这类异常,即使没有用try-catch语句捕获,也没有用throws子句声明抛出会编译通过。...程序会在throw语句后立即终止,后面的语句执行不到,然后在包含所有try块中(可能在上层调用函数中)从里向外寻找含有与其匹配catch子句try块。   ...如果抛出了检查异常,则还应该在方法头部声明方法可能抛出异常类型。该方法调用者必须检查处理抛出异常。...如果所有方法都层层上获取异常,最终JVM进行处理,处理很简单,就是打印异常消息和堆栈信息。如果抛出是Error或RuntimeException,则该方法调用者可选择处理该异常。

40350

Java中异常Exception和捕获,自定义异常

异常概述 1.1 什么是程序异常  在使用计算机语言进行项目开发过程中,即使程序员把代码写得尽善尽美,在系统运行过程中仍然遇到一些问题,因为很多问题不是靠代码能够避免。...Exception: 其它因编程错误或偶然外在因素导致一般性问题,需要使用针对性代码进行处理,使程序继续运行。否则一旦发生异常,程序挂掉。...如果异常没有在调用者方法中处理,继续被给这个调用方法上层方法。这个过程将一直继续下去,直到异常被处理。这一过程称为捕获(catch)异常。...,方法签名后面不能出现“throws 编译时异常类型”。...throw语句导致程序执行流程被改变,throw语句是明确抛出一个异常对象,因此下面的代码将不会执行。

1.3K30

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券