黑马程序员-----------------异常


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

异常的概念:jvm虚拟机在执行某个程序时,发现了不寻常的状况,Java中就把这种状况叫做异常。

在Java中,所有的异常都是以类的形式存在,Java除了自己封装了一些异常类之外,程序员也可以自定义所需要抛出的异常类。

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

为何要处理异常:在变成程序的过程中,如果要处理一些可能发生的问题,那么久需要用大量的if---else等语句相互之间嵌套配合来排查 捕获程序中这些可能发生的错误,这样程序执行就变得缓慢,为了提高程序的执行速度因此就需要对可能发生的问题作异常处理。

异常的处理原则:
1.处理方式有两种:try或者throws
2.调用到抛出异常的功能时,抛出几个就处理几个。
3.多个catch,父类的catch放到最下面。
4.catch内,需要定义针对性的处理方式,当捕获到的异常,本功能处理不了时,可以继续在catch中抛出。

	try
	{
		throw new AException
	}catch(AException e)
	{
		throw e;
	}

异常处理语句:

try
{
/*存放需要被检测的代码*/
}
catch(异常类 变量)
{
/*处理异常的代码(处理方式)*/
}
finally
{
/*一定会被执行的语句*/
}

可以用一个图列来表示处理语句的执行过程。


代码演示:

public class ExceptionDemo {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//定义一个长度为3的数组
		int arr[] = new int[3];
		//故意制造异常 赋值一个大于3的角标给数组	
		try {
			arr[5] = 3;
			System.out.println("try~~~");
		} catch (Exception e) {
			//打印一下异常
			e.printStackTrace();
			System.out.println("catch~~~");
		}finally
		{
			System.out.println("finally~~");
		}
	}	
}


运行结果:
java.lang.ArrayIndexOutOfBoundsException: 5
at com.leo.blog.ExceptionDemo.main(ExceptionDemo.java:14)

catch~~
finally~~

当执行try块的语句是被检测到了异常以后后面的语句就不会执行了,跳转到catch语句中执行处理异常的方式,这里e.printStackTrace();是用来打印一下出现的是什么异常,接着就执行finally代码块语句。

把代码做一下调整为正常没有异常的语句。

public class ExceptionDemo {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//定义一个长度为3的数组
		int arr[] = new int[3];
		//故意制造异常 赋值一个大于3的角标给数组	
		try {
			arr[2] = 3;
			System.out.println("try~~~");
		} catch (Exception e) {
			//打印一下异常
			e.printStackTrace();
			System.out.println("catch~~~");
		}finally
		{
			System.out.println("finally~~");
		}
	}	
}
结果:

try~~~
finally~~

这时发现catch语句里面的代码没执行,说明没有走到catch区,而直接跳到了finally区。说明不管有没有异常finally区的代码一定是会被执行的。
异常的好处:
1.将问题进行封装。
2.将正常流程代码和问题处理代码相分离,方便阅读。

异常体系:
Throwable
|Error
|Exception
|RuntimeException
异常体系的特点:异常体系中的所有类以及建立的对象都具备可抛性。
也就是说可以被throw和throws关键字所操作。
只有异常体系具有这个特点。
throw和throws的用法:
throw定义在函数内,用于抛出异常对象。
throws定义在函数上,用于抛出异常类,可以抛出多个用逗号隔开。

当函数内容有throw抛出异常对象,并未进行try处理。必须要在函数上声明,都在编译失败。

try {
			//注意:在throw抛出了异常以后 后面不能再有代码了
			throw new Exception();
			//System.out.println("try~~~");
		} catch (Exception e) {
			//打印一下异常
			e.printStackTrace();
			System.out.println("catch~~~");
		}finally
		{
			System.out.println("finally~~");
		}

注意:RuntimeException除外。也就是说,函数内如果抛出RuntimeException异常,函数上可以不用声明。
如果函数声明了异常,调用需要进行处理,处理方法可以throws可以try



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值