当前位置:编程学习 > JAVA >>

Java异常处理及与C++的比较--异常分类.检验异常.非检验异常.常见异常

Java和C++一样,也有一些关键字用于处理异常。
 
注:以下2个示例只是为了尽可能把所有关键字都使用到,为了介绍关键字的使用位置,并不推荐以下做法。
 
 
 
 
 
 
 
C++中异常处理的关键字有:try.catch.throw,基本用法示例:
 
 
[cpp] 
try  
{  
    throw E;  
}  
catch (E e)  
{  
      
}  
catch (...)  
{  
}  
 
try
{
throw E;
}
catch (E e)
{
 
}
catch (...)
{
}
throw E抛出自己定义的异常,然后catch。catch(...)用于处理所有上面没有catch的异常。 
 
 
 
 
Java中异常处理的关键字有:try.catch.finally.throw.throws,基本用法示例:
 
 
[java] 
public void Err() throws E  
{  
  try   
    {   
     ...   
  }   
    catch (E e)   
    {   
     throw e;   
  }  
    finally  
    {  
       ...  
    }  
}  
 
public void Err() throws E
{
  try 
    { 
     ... 
  } 
    catch (E e) 
    { 
     throw e; 
  }
    finally
    {
       ...
    }
}
 
 
try.catch和C++类似,不过这里的catch没有catch(...),但是有finally块,这个块是try结束以后,不管是否有异常,不管异常是否被捕获,都会执行的一个块。
 
另外,throw用于抛出异常,throws用于说明函数可能抛出什么异常。
 
 
 
 
Java异常分类
 
Throwable--异常基类
Error--Throwable的子类,一般由虚拟机抛出,比较严重的错误,程序要做的是安全退出,其他的无能为力
Exception--Throwable的子类,一般是由程序引起的异常
RuntimeException--Exception的子类,运行时出现的异常,数组越界、空指针这一类的,一般可以通过修改程序来避免
非RuntimeException--Exception的子类,IOException之类的
 
 
检验异常与非检验异常
看到有些地方把这2个概念说的很绕口,我个人的理解是:
1.检验异常就是编译器会检验你是否catch了的异常,编译器会强制要求你写对应的catch语句,否则编译报错。这些异常一般都是方法后面带有throws的,就是说,方法说明了自己可能会抛出异常的。至于编译器为什么要这么做,也比较好理解,因为我一个方法,既然我已经预见到了可能会抛出异常,那么你就必须要处理一下,我都提醒你会出错了,你还不处理,那你这安的是什么心?除非检验异常以外的异常,都属于这一类。
2.非检验异常就是编译器不会去检验你是否catch的,比如像数组越界、空指针这一类的,编译器不会来管你。RuntimeException和Error属于这一类。
 
 
以上是个人理解,如果有误,还请各位指出,以便及时纠正,谢谢!
 
 
 
常见异常
ArrayIndexOfBoundsException--数组下标越界
ClassCastException-----------强制转换类失败
IllegalArgumentException-----参数异常
NullPointException-----------空指针异常
AssertionError---------------断言出错
ExceptionInInitializerError--初始化异常
StackOverflowError-----------栈溢出
 
 
补充:软件开发 , C++ ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,