黑马程序员_异常架构和异常处理

------- android培训java培训、期待与您交流! ----------

异常:

异常也称为例外,是在程序运行过程中发生的、会打断程序正常执行的事件,几种常见的异常:

1、算术异常(ArithmeticException)。

2、没有给对象开辟内存空间时会出现空指针异常(NullPointerException)。

3、找不到文件异常(FileNotFoundException)。

所以在程序设计时,必须考虑到可能发生的异常事件,并做出相应的处理。这样才能保证程序可以正常运行。

Java的异常处理机制也有着面向对象的基本思想。在Java中,所有的异常都是以类的类型存在,除了内置的异常类之外,Java也可以自定义的异常类。此外Java的异常处理机制也允许自定义抛出异常。

 举个例子说明:

public class ExceptionTest
{
	public static void main(String args[])
	{
		int[] arr = new int[1];	//数组大小为1个元素
		System.out.println("arr[1] = "+arr[1]);	//数组角标是下标值超出所容许的范围
	}
}
运算结果如下:
C:\Users\lenovo\Desktop>javac ExceptionTest.java

C:\Users\lenovo\Desktop>java ExceptionTest
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
        at ExceptionTest.main(ExceptionTest.java:6)

C:\Users\lenovo\Desktop>

错误的原因在于数组的下标值超出了最大允许的范围。Java发现这个错误之后,便由系统抛出“ArrayIndexOutOfBoundsException”这个种类的异常,用来表示错误的原因,并停止运行程序。如果没有编写相应的处理异常的程序代码,则Java的默认异常处理机制会先抛出异常、然后停止程序运行。

异常的处理格式:

格式1:
try
{
	要检查的程序语句;
}
catch(Exception e)
{
	异常发生时的处理语句;
}
finally
{
	一定会运行到的程序代码;
}

格式2:
try
{
	要检查的程序语句;
}
catch(Exception e)
{
	异常发生时的处理语句;
}

格式3:
try
{
	要检查的程序语句;
}
finally
{
	一定会运行到的程序代码;
}

处理异常的顺序:

1、try程序块若是有异常发生时,程序的运行便中断并抛出“异常类所产生的对象”。

2、抛出的对象如果属于catch()括号内捕获的异常类,则catch会捕捉此异常并进到catch的块里继续运行。

3、try程序块是否有捕捉到异常,或者捕捉到的异常是否与catch()括号里的异常相同,最后一定会运行finally块里的程序代码,finally只有一种情况不会执行,当执行到System.exit(0);fianlly不会执行。finally的程序代码块运行结束后,程序再回到try-catch-finally块之后继续执行。

由上述过程可知,异常捕捉过程中做了两个判断:

1、try程序块是否有异常产生。

2、产生的异常是否和catch()括号内捕捉的异常相同。

finally块是可以省略的,如果省略了finally块不写,则在catch()块运行结束后,程序跳到try-cath块之后继续执行。

异常处理示例:

public class ExceptionTest
{
	public static void main(String args[])
	{
		try	//检查这个程序块的语句
		{
			int[] arr = new int[1];	//数组大小为1个元素
			System.out.println("arr[1] = "+arr[1]);	//数组角标是下标值超出所容许的范围
		}
		catch(ArrayIndexOutOfBoundsException e)	//处理try块检测到的异常
		{
			System.out.println("数组超出范围");
		}
		finally	//这个块的代码一定会执行
		{
			System.out.println("这里一定会被执行");
		}
		System.out.println("程序运行完成");
	}
}
运行结果如下:
C:\Users\lenovo\Desktop>javac ExceptionTest.java

C:\Users\lenovo\Desktop>java ExceptionTest
数组超出范围
这里一定会被执行
程序运行完成

C:\Users\lenovo\Desktop>

异常类的继承架构:

Throwable
|--Error
|--Exception
	|--IOException
	|--RuntimeException

习惯上将Error与Exception类统称为异常类,但本质上还是不同。Error类专门用来处理严重影响程序运行的错误,通常程序设计者不会去捕捉这种错误,其原因在于即使捕捉到它,也无法给予适当的处理,如JAVA虚拟机出错就属于一种Error。

不同于Error类的Exception类包含了一般性的异常,这些异常通常在捕捉到之后便可做妥善处理,以确保程序继续运行,如ExceptionTest.java里所捕捉到的ArrayIndexOutOfBoundsException就是属于这种异常。从异常类的继承架构可以看出:Exception类扩展出数个子类,其中IOException、RunntimeException是较常用的两种。RunntimeException即使不编写异常处理的程序代码,依然可以编译成功,而这种异常必须是在程序运行时才有可能发生,例如:数组的索引值超出了范围,与RunntimeException不同的是,IOException一定要编写异常处理的程序代码才行,它通常用来处理与输入/输出相关的操作,如读写文件等,当异常发生时,发生异常的语句代码会抛出一个异常类的实例化对象,然后把此对象与catch语句中的类的类型进行匹配并进行处理。

------- android培训java培训、期待与您交流! ----------

详细请登录:http://edu.csdn.net/heima

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值