黑马程序员技术交流社区

标题: 对异常的疑惑 [打印本页]

作者: 陈小红    时间: 2012-10-31 00:10
标题: 对异常的疑惑
异常为什么要分编译时和运行时异常,若有可能出现问题,都在编译时不通过岂不省事?不解。
作者: 崔政    时间: 2012-10-31 00:15
给你举个例子你就明白了
假如说你要加载一个文件进来,方法参数需要传入一个文件路径
万一文件路径是错误的,文件压根不存在,而在编译时是不知道的,那运行不就出错了。
这就是运行时异常,无法预料的。
而编译时异常我感觉主要就是让程序员看的,比如说泛型的引用
List<String> list=new ArrayList<String>();
如果list.add(23);
就会显示编译时异常。
作者: 黑马-zhangping    时间: 2012-10-31 10:36
运行时异常,系统会自动抛出,可以捕获,也可以不捕获,比如数组下标越界,除数是0,对于程序代码比较多的情况下,你是可能查不到他要发生的异常,而编译时异常,可能是语法错误,逻辑不正确,此时编译时异常指的是编译器就无法通过的异常,可能是语法错误这些问题。问什么不在编译时就让其都通不过呢,是因为他们各其职责,又由于有些问题可能是程序本身的问题,还有些可能是硬件的问题,所以有些问题是避免不了的,就放在运行时抛出
作者: 黑马刘向阳    时间: 2012-10-31 10:47
运行异常是由程序运行状态决定的,无法通过编译来检测,具有偶然性,由系统运行时自动检测并处理

编译异常就是编译可以检查出的异常,必须要你自己处理(捕获或者抛出)
作者: 杨政    时间: 2012-10-31 10:54
有些异常是否会发生只有运行时才知道。编译时还不知道会发生异常,所以编译会通过。
作者: 任雷彬    时间: 2012-10-31 12:15
异常分为runtime异常,和非runtime异常。

编译时异常主要是是检测你的程序代码语法是否错误,比如:
数据类型定义错误,方法代码写错等。 就是由于输入错误的造成,这些可以被系统发现并且可以改正的。

而运行时异常是由于程序错误,虚拟机认为不可以运行的。
如   NullPointerException异常,本身并没有错误,但是系统程序认为有错,认为不能运行,
就会报出 空指针异常。
而且运行时异常是系统会自动抛出的,可以不用声明的。
作者: 齐连涛    时间: 2012-10-31 14:34
编译 和 运行 各有分工
编译时,主要检查代码语法问题,符合java语法的编译都会通过,比如该传入一个什么类型的参数,你传入的只要是这个类型,编译就通过。
运行时,还要看这个具体参数是超越了该类型范围的,,当然运行时抛异常了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2