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

Java和C++一样,也有一些关键字用于处理异常。

注:以下2个示例只是为了尽可能把所有关键字都使用到,为了介绍关键字的使用位置,并不推荐以下做法



C++中异常处理的关键字有:try.catch.throw,基本用法示例:

		try
		{
			throw E;
		}
		catch (E e)
		{
			
		}
		catch (...)
		{
		}

throw E抛出自己定义的异常,然后catch。catch(...)用于处理所有上面没有catch的异常。


Java中异常处理的关键字有:try.catch.finally.throw.throws,基本用法示例:

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-----------栈溢出


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值