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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

什么是编译异常和运行异常有什么区别吗

5 个回复

倒序浏览
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,但一般更可能源于环境问题,如内存耗尽。错误在程序中无须处理,而有运行环境处理。

评分

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

查看全部评分

回复 使用道具 举报
简单说编译出错时语法上的错误
而运行出错是编译通过,但是出现空指针,数组越界这些错误时还是会报错的一种情况
他们都继承Throwable这个类
回复 使用道具 举报
本帖最后由 王宝康 于 2012-7-12 13:58 编辑

     异常机制是指当程序出现错误后,程序执行的流程应该进行怎样的改变,以保证程序的安全运行,一般会由try-catch块捕获并进行相关处理。
   
万宝东
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,但一般更可能源于环境问题,如内存耗尽。错误在程序中无须处理,而有运行环境处理

   传统的处理异常的办法是,函数返回一个特殊的结果来表示出现异常,调用该函数的程序负责检查并分析函数返回的结果。这样做有如下的弊端:例如函数返回-1代表出现异常,但是如果函数确实要返回-1这个正确的值时就会出现混淆;可读性降低,将程序代码与处理异常的代码混爹在一起;由调用函数的程序来分析错误,这就要求客户程序员对库函数有很深的了解。
异常处理的流程:
① 遇到错误,方法立即结束,并不返回一个值;同时,抛出一个异常对象 。
② 调用该方法的程序也不会继续执行下去,而是搜索一个可以处理该异常的异常处理器,并执行其中的代码 。
回复 使用道具 举报
本帖最后由 刘煜 于 2012-7-12 14:17 编辑

编译时异常:由编译器在编译时检测是否会发生在方法的执行过程中的异常。对于编译时的异常类,即使通过仔细编程也无法避免。因为程序正确,但因为外在的环境条件不满足引发。例如,要访问的文件不存在、用户错误及I/O问题等情况。这类异常通常都在JDK说明文档中定义的方法后面通过throws关键字将异常抛出,Java编译器强制要求处理这类异常,编程时必须捕获并做相应处理,如果不捕获这类异常,程序将不能被编译通过。
运行时异常: Java运行系统执行过程中的异常,对于此类的异常,即使不编写异常处理的程序代码,依然可以编译成功,因为该异常是在程序运行时才有可能发生的,例如算术异常(除数为0)、数组下标越界等。这类异常需要更改程序来避免,Java编译器强制要求处理这类异常。此类异常适合用于异常发生时不处理让程序停止,进行代码修正。

评分

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

查看全部评分

回复 使用道具 举报
编译异常是在编译时期jvm就能发现的可能异常情况,提醒程序员处理。
运行时异常在编译期间不会发生,运行时程序自动退出。

异常Exception类有个子类RuntimeException是运行时异常,其下还有很多子异常类,当其发生时,程序停止运行。程序员是处理不了。

程序员能处理的只能是编译时异常。

只要是继承了RuntimeException的异常都是运行时异常。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马