A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

如何区分编译时异常和运行时异常,有点混淆了
和这两个类有关吗?runtimeException、Exception

评分

参与人数 1技术分 +1 收起 理由
To + 1 赞一个!

查看全部评分

8 个回复

倒序浏览
Exception类定义了由应用程序抛出的异常,这些异常是可以被用户程序捕获的。Exception异常分为:运行时异常(RuntimeException)和编译时异常(CheckedException)。
运行时异常是任何属于RuntimeException的子类的异常,是程序运行中,由于程序的一些代码存在缺陷(bug),导致程序终止,无法继续运行,比如空指针啊,数组越界等。运行时异常通常无法恢复,所以程序不用处理此类异常,一般做法是在异常产生时,根据错误信息找到错的程序代码,然后进行代码修复。
编译时异常是能被Java编译器分析的异常,方法调用者通过代码的检测与处理,可以对其进行恢复。在Java异常体系中,预期异常是程序必须处理的,否则就会出现编译错误。
这是我的笔记,希望对你有所帮助!

评分

参与人数 1技术分 +1 收起 理由
杨增坤 + 1

查看全部评分

回复 使用道具 举报
对 编译异常 能不能举一个例子??
回复 使用道具 举报
Java中用2种方法处理异常:

1.在发生异常的地方直接处理;

2.将异常抛给调用者,让调用者处理。

Java异常可分为3种:

  (1)编译时异常:Java.lang.Exception

  (2)运行期异常:Java.lang.RuntimeException

  (3)错误:Java.lang.Error

Java.lang.Exception和Java.lang.Error继承自Java.lang.Throwable;

Java.lang.RuntimeException继承自Java.lang.Exception.

编译时异常: 程序正确,但因为外在的环境条件不满足引发。例如:用户错误及I/O问题----程序试图打开一个并不存在的远程Socket端口。这不是程序本身的逻辑错误,而很可能是远程机器名字错误(用户拼写错误)。对商用软件系统,程序开发者必须考虑并处理这个问题。Java编译器强制要求处理这类异常,如果不捕获这类异常,程序将不能被编译。

运行期异常: 这意味着程序存在bug,如数组越界,0被除,入参不满足规范.....这类异常需要更改程序来避免,Java编译器强制要求处理这类异常。

错误: 一般很少见,也很难通过程序解决。它可能源于程序的bug,但一般更可能源于环境问题,如内存耗尽。错误在程序中无须处理,而有运行环境处理。

点评

非常好!  发表于 2013-10-28 11:48

评分

参与人数 1技术分 +1 收起 理由
杨增坤 + 1

查看全部评分

回复 使用道具 举报
编译时异常,现在eclipse都会提示你的,运行时异常:就是程序运行时可能发生的异常,比如空指针啊,数组越界啊,这些都是你写代码的bug或者是什么条件没满足导致,开发时,一般就是try --catch --finally 或者throw一个异常对象(自定义的也行),throws一个异常类,给调用者处理
回复 使用道具 举报
三楼的回答很细致了,如果楼主还是不懂的话,建议回头看一些资料,很多类,接口,方法在实现的时候都是有提示说明可能出现的异常的。个人多异常处理机制的理解是,在很多时候有些异常我们是可以通过判断语句来规避的。同样也很多异常时我们无法回避的,比如客户端。客户做什么,我们是不能决定的,所以对于他们的非法操作,就要用到异常处理机制。决定是提示操作错误还是异常处理,就要看具体的功能了。
回复 使用道具 举报
djkyqkzj 发表于 2013-10-27 20:29
Java中用2种方法处理异常:

1.在发生异常的地方直接处理;

能给举一个编译期异常的例子,代码实现
回复 使用道具 举报
RuntimeException 运行时异常,故名思议,也就是说编译的时候(javac命令)程序是不会报错的,为什么呢?我们javac编译的时候是严格按照语法要求进行处理的,而不会执行相应的代码,例如当程序中出现访问数组元素,jvm只会检查你访问的数组是不是符合语法访问数组元素的要求,而不会检查是否有越界。而普通的异常,比如你调用文件对象的方法时会出现文件未找到异常,所以说这些方法会在方法上声明(throws),那么jvm在编译的时候就会知道你的方法会有异常,所以你就得处理或交由上级处理(再次抛出)。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马