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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈小红 中级黑马   /  2012-10-31 00:10  /  1752 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

异常为什么要分编译时和运行时异常,若有可能出现问题,都在编译时不通过岂不省事?不解。

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

6 个回复

倒序浏览
给你举个例子你就明白了
假如说你要加载一个文件进来,方法参数需要传入一个文件路径
万一文件路径是错误的,文件压根不存在,而在编译时是不知道的,那运行不就出错了。
这就是运行时异常,无法预料的。
而编译时异常我感觉主要就是让程序员看的,比如说泛型的引用
List<String> list=new ArrayList<String>();
如果list.add(23);
就会显示编译时异常。

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

回复 使用道具 举报
运行时异常,系统会自动抛出,可以捕获,也可以不捕获,比如数组下标越界,除数是0,对于程序代码比较多的情况下,你是可能查不到他要发生的异常,而编译时异常,可能是语法错误,逻辑不正确,此时编译时异常指的是编译器就无法通过的异常,可能是语法错误这些问题。问什么不在编译时就让其都通不过呢,是因为他们各其职责,又由于有些问题可能是程序本身的问题,还有些可能是硬件的问题,所以有些问题是避免不了的,就放在运行时抛出

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

回复 使用道具 举报
运行异常是由程序运行状态决定的,无法通过编译来检测,具有偶然性,由系统运行时自动检测并处理

编译异常就是编译可以检查出的异常,必须要你自己处理(捕获或者抛出)

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

回复 使用道具 举报
有些异常是否会发生只有运行时才知道。编译时还不知道会发生异常,所以编译会通过。
回复 使用道具 举报
异常分为runtime异常,和非runtime异常。

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

而运行时异常是由于程序错误,虚拟机认为不可以运行的。
如   NullPointerException异常,本身并没有错误,但是系统程序认为有错,认为不能运行,
就会报出 空指针异常。
而且运行时异常是系统会自动抛出的,可以不用声明的。
回复 使用道具 举报
编译 和 运行 各有分工
编译时,主要检查代码语法问题,符合java语法的编译都会通过,比如该传入一个什么类型的参数,你传入的只要是这个类型,编译就通过。
运行时,还要看这个具体参数是超越了该类型范围的,,当然运行时抛异常了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马