黑马程序员技术交流社区
标题:
异常——如何区分、使用编译时异常和运行时异常
[打印本页]
作者:
赵许星
时间:
2013-10-27 17:02
标题:
异常——如何区分、使用编译时异常和运行时异常
如何区分编译时异常和运行时异常,有点混淆了
和这两个类有关吗?runtimeException、Exception
作者:
李文帅
时间:
2013-10-27 17:51
Exception类定义了由应用程序抛出的异常,这些异常是可以被用户程序捕获的。Exception异常分为:运行时异常(RuntimeException)和编译时异常(CheckedException)。
运行时异常是任何属于RuntimeException的子类的异常,是程序运行中,由于程序的一些代码存在缺陷(bug),导致程序终止,无法继续运行,比如空指针啊,数组越界等。运行时异常通常无法恢复,所以程序不用处理此类异常,一般做法是在异常产生时,根据错误信息找到错的程序代码,然后进行代码修复。
编译时异常是能被Java编译器分析的异常,方法调用者通过代码的检测与处理,可以对其进行恢复。在Java异常体系中,预期异常是程序必须处理的,否则就会出现编译错误。
这是我的笔记,希望对你有所帮助!
作者:
赵许星
时间:
2013-10-27 20:13
对 编译异常 能不能举一个例子??
作者:
HM代景康
时间:
2013-10-27 20:29
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,但一般更可能源于环境问题,如内存耗尽。错误在程序中无须处理,而有运行环境处理。
作者:
i'm_fine_
时间:
2013-10-27 22:59
编译时异常,现在eclipse都会提示你的,运行时异常:就是程序运行时可能发生的异常,比如空指针啊,数组越界啊,这些都是你写代码的bug或者是什么条件没满足导致,开发时,一般就是try --catch --finally 或者throw一个异常对象(自定义的也行),throws一个异常类,给调用者处理
作者:
起猿
时间:
2013-10-27 23:56
三楼的回答很细致了,如果楼主还是不懂的话,建议回头看一些资料,很多类,接口,方法在实现的时候都是有提示说明可能出现的异常的。个人多异常处理机制的理解是,在很多时候有些异常我们是可以通过判断语句来规避的。同样也很多异常时我们无法回避的,比如客户端。客户做什么,我们是不能决定的,所以对于他们的非法操作,就要用到异常处理机制。决定是提示操作错误还是异常处理,就要看具体的功能了。
作者:
赵许星
时间:
2013-10-28 12:14
djkyqkzj 发表于 2013-10-27 20:29
Java中用2种方法处理异常:
1.在发生异常的地方直接处理;
能给举一个编译期异常的例子,代码实现
作者:
郑齐育
时间:
2013-10-28 15:02
RuntimeException 运行时异常,故名思议,也就是说编译的时候(javac命令)程序是不会报错的,为什么呢?我们javac编译的时候是严格按照语法要求进行处理的,而不会执行相应的代码,例如当程序中出现访问数组元素,jvm只会检查你访问的数组是不是符合语法访问数组元素的要求,而不会检查是否有越界。而普通的异常,比如你调用文件对象的方法时会出现文件未找到异常,所以说这些方法会在方法上声明(throws),那么jvm在编译的时候就会知道你的方法会有异常,所以你就得处理或交由上级处理(再次抛出)。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2