error和exception有什么区别

 我来答
历拟亦H
2017-11-01 · TA获得超过292个赞
知道小有建树答主
回答量:360
采纳率:62%
帮助的人:51.8万
展开全部
error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。 exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。
微测检测5.10
2023-07-11 广告
IEC62133与en62133的区别如下:1. 认证机构不同:IEC62133是国际的标准,它以国际通用的标准进行生产;而en62133采用的是欧盟的标准,它使用欧盟的生产需求进行生产。2. 宗旨不同:IEC62133的宗旨是促进电气、电... 点击进入详情页
本回答由微测检测5.10提供
妤霸L5d21
2021-01-04 · 超过38用户采纳过TA的回答
知道小有建树答主
回答量:189
采纳率:0%
帮助的人:11.3万
展开全部

Error(错误)

    表示仅靠程序本身无法恢复的严重错误,比如说内存溢出、动态链接异常、虚拟机错误。应用程序不应该抛出这种类型的对象。假如出现这种错误,除了尽力使程序安全退出外,在其他方面是无能为力的。所以在进行程序设计时,应该更关注Exception类。

Exception(异常)

    由Java应用程序抛出和处理的非严重错误,比如所需文件没有找到、零作除数,数组下标越界等。它的各种不同子类分别对应不同类型异常。

Exception可分为两类:CheckedExceptionRuntimeException

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
爱尚实训_博雅
2021-03-17 · 超过22用户采纳过TA的回答
知道答主
回答量:232
采纳率:55%
帮助的人:13.5万
展开全部
Throwable 类是 Java 语言中所有错误或异常的超类。

它有两个子类的实例,Error 和 Exception,通常用于指示发生了异常情况。

error 是运行环境或硬件设备方面发生的一种严重问题。比如说内存溢出、不可能指望程序能处理这样的情况。

exception 表示一种设计或实现问题、也就是说,它表示如果程序运行正常,从不会发生的情况。

异常分为检查型异常(如SQLExcpetion)和运行时异常(如ClassCastException)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
尚学堂java学院
2021-01-04 · 百度认证:北京尚学堂科技有限公司官方账号
尚学堂java学院
向TA提问
展开全部

1.如图Exception 和 Error都继承自Throwable类,由jdk api文档中对该类的描述可以知道它是异常处理机制的基本组成类型。可以由虚拟机抛出或者编码者自行抛出(throw)

  • jdk8中文发翻译Throwable类的描述:Throwable类是Java语言中所有错误和异常的Throwable类。 只有作为此类(或其一个子类)的实例的对象由Java虚拟机抛出,或者可以由Java throw语句抛出。 类似地,只有这个类或其子类可以是catch子句中的参数类型。


2.Exception 和 Error 体现了 Java 平台设计者对不同异常情况的分类。Exception 是程序正常运行中,可以预料的意外情况,可能并且应该被捕获,进行相应处理。

3.Error 是指在正常情况下,不大可能出现的情况,绝大部分的 Error 都会导致程序(比如 JVM 自身)处于非正常的、不可恢复状态。既然是非正常情况,所以不便于也不需要捕获,常见的比如 OutOfMemoryError 之类,都是 Error 的子类。

4.Exception 又分为可检查(checked)异常和不检查(unchecked)异常,可检查异常在源代码里必须显式地进行捕获处理,这是编译期检查的一部分。前面我介绍的不可查的 Error,是 Throwable 不是 Exception。

如何处理这些异常?

  • 在现实编程中我们一般使用 try-with-resources 和 multiple catch来进行一些异常处理(便利的特性),在编译时期,会自动生成相应的处理逻辑,比如,自动按照约定俗成 close 那些扩展了 AutoCloseable 或者 Closeable 的对象。

  • try-with-resources 是一种处理Closeable实现类关闭资源的一种写法,简单写了一个例子可以发现其实这就是一中语法,这种语法可以自动编译帮忙编译最后关闭流的操作:

public static void main(String[] args) {

        try (BufferedReader br = new BufferedReader(new FileReader("a"));
BufferedWriter writer = new BufferedWriter(new FileWriter("a"))) {

            // Try-with-resources
} catch (IOException e) {// Multiple catch
// Handle it
}
}

编译后class

public static void main(String[] args) {        try {
BufferedReader br = new BufferedReader(new FileReader("a"));
Throwable var2 = null;            try {
BufferedWriter writer = new BufferedWriter(new FileWriter("a"));
Object var4 = null;                if (writer != null) {                    if (var4 != null) {                        try {
writer.close();
} catch (Throwable var15) {
((Throwable)var4).addSuppressed(var15);
}
} else {
writer.close();
}
}
} catch (Throwable var16) {
var2 = var16;                throw var16;
} finally {                if (br != null) {                    if (var2 != null) {                        try {
br.close();
} catch (Throwable var14) {
var2.addSuppressed(var14);
}
} else {
br.close();
}
}

}
} catch (IOException var18) {
;
}

}

异常处理的两个基本原则

  1. 尽量不要捕获类似 Exception 这样的通用异常,而是应该捕获特定异常

    这是因为在日常的开发和合作中,我们读代码的机会往往超过写代码,软件工程是门协作的艺术,所以我们有义务让自己的代码能够直观地体现出尽量多的信息,而泛泛的 Exception 之类,恰恰隐藏了我们的目的。另外,我们也要保证程序不会捕获到我们不希望捕获的异常。比如,你可能更希望 RuntimeException 被扩散出来,而不是被捕获。

  2. 不要生吞(swallow)异常。这是异常处理中要特别注意的事情,因为很可能会导致非常难以诊断的诡异情况。

    如果我们不把异常抛出来,或者也没有输出到日志(Logger)之类,程序可能在后续代码以不可控的方式结束。没人能够轻易判断究竟是哪里抛出了异常,以及是什么原因产生了异常。

  3. 在写程序时可以通过Objects类(jdk提供),或者断言等提前判断问题,如空指针异常的一些值的处理Objects. requireNonNull(filename);而不是使用之后有问题再系统抛出异常,这可能就会不直观的找到问题所在。即:Throw early, catch late 原则

希望对您有所帮助!~

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
心静宁国6308
2021-01-04
知道答主
回答量:29
采纳率:0%
帮助的人:2.1万
展开全部
关于error和exception的区别是error表示恢复不是不可能但很困难的情况下的一种严重问题是exception表示一种设计或实现问题。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 3条折叠回答
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式