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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 高顺德 中级黑马   /  2013-3-26 14:22  /  2556 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 天下 于 2013-3-26 15:53 编辑

error和异常有啥区别?都怎么出现的,要怎么避免这写东西。

点评

如果问题未解决,请继续追问回复者,如果问题已经解决,请将分类改为“已解决”,谢谢  发表于 2013-3-26 18:58

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

8 个回复

倒序浏览
error是严重的错误,编译不能通过。异常里面有运行期异常就是runtimeException这个异常是编译可以通过的,运行时报错的异常;

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
error是继承自父类java.lang.Error,而exception都继承自java.lang.Exception。
Error是Throwable的子类,用于标记严重错误。合理的应用程序不应该去try/catch这种错误。绝大多数的错误都是非正常的,就根本不该出现的。
Exception 是Throwable的一种形式的子类,用于指示一种合理的程序想去catch的条件。即它仅仅是一种程序运行条件,而非严重错误,并且鼓励用户程序去catch它。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
谢威 发表于 2013-3-26 14:58
error是继承自父类java.lang.Error,而exception都继承自java.lang.Exception。
Error是Throwable的子类, ...

那按照你的意思就是说 error也是可以用try处理的?
回复 使用道具 举报
本帖最后由 姜伟 于 2013-3-26 15:22 编辑

Error是不能解决的问题,Exception是可以用来try/catch语句块来解决的问题。
比方说,public static void main(String []args)
        {
        byet []arr =new byte[1024*1024*600];
                }
这行代码就是Error,不能再进行调试,因为数组大小已经超出JVM所分配的内存了,只能对代码进行修改,其它的不管怎么操作,都没办法解决这个问题。
而Exception能通过try/catch语句块儿来解决。例如:
File file1 =new File("abc");
try {
   file1.createNewFile();
  } catch (IOException e2) {
     e2.printStackTrace();
  }
File file2 =null;

FileInputStream fis =null;
try {
    fis =new FileInputStream(file2);
  } catch (Exception e) {
    file2 =file1;
   try {
    fis =new FileInputStream(file1);
   } catch (FileNotFoundException e1) {
     e1.printStackTrace();
   }
这行代码中fis=new FIleInputStream(file2)会出现空指针异常,就会读取catch(Exception e)中的语句,将file1的值赋给file2,然后再新建一个file1的读取流。
也就是说,如果file2存在,就新建file2的读取流,如果ifle2不存在,就新建file1的读取流。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
异常体系:
Throwable
                |--Error
                |--Exception
                        |--RuntimeException
Error:称为错误,由JVM生成并抛出,包括动态链接失败、虚拟机错误等,程序不会对其进行处理。
Exception:所有异常类的父类,其子类对应了各种各应可能出现的异常事件,一般需要用户显式的声明或捕获。

异常有两种:
编译时被检测异常:该异常在编译时,如果没有处理(没有抛也没有try),编译失败。该异常被标识,代表可以被处理。
运行时异常(编译时不检测) RuntimeException:在编译时,不需要处理,编译器不检查。该异常的发生,建议不处理,让程序停止。需要对代码进行修正。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
Error(错误)表示系统级的错误和程序不必处理的异常,是java运行环境中的内部错误或者硬件问题,比如,内存资源不足等,对于这种错误,程序基本无能为力,除了退出运行外别无选择。
Exception(违例)表示需要捕捉或者需要程序进行处理的异常,它处理的是因为程序设计的瑕疵而引起的问题或者在外的输入等引起的一般性问题,是程序必须处理的。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
异常体系:

Java把非正常的情况分为异常(Exception)和错误(Error),它们都继承Throwable。
       Error错误,一般指虚拟机相关问题,如系统崩溃,动态连接失败等等,这种错误无法恢复或者不可捕获,将导致应用程序中断。应用程序无法处理这些错误,因此代码不能使用catch或throws来捕获或者抛出这些Error对象。
        对于Exception异常,是针对程序中发生的人为错误,如空指针异常,数组角标越界等等,这些异常都是人为造成的,在开发中可以用代码进行修复。所以可以使用catch或throws来捕获或者抛出这些Exception对象。
       但是异常又分为Checked异常和Runtime异常,Java人为Checked异常都是可以被处理的异常,所以必须显式处理(try...catch或者抛出)。如果不处理这些异常,程序将无法通过编译。而Runtime异常灵活一点,无须显式抛出,如果需要捕获Runtime异常,可以使用try...catch来捕获。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
Error错误,一般情况下,不编写针对性的代码进行处理,通常是jvm发生的,需要对程序进行修正才用这个异常
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马