异常

异常:java在运行时期出现的不正常情况。

1.概述:按照面向对象的思想对问题进行描述和封装,将问题变成对象,里面包含着问题的名称,信息以及位置等。
2.常见的问题:一种可处理的;向上抽取到一个父类中:Exception(异常)
一种是通常不处理的,向上抽取到一个父类中Error.通常都是由jvm或者系统抛出的严重问题,解决方法是修改代码。

3.无论是错误还是异常,都有名称、信息、位置等共性内容,向上抽取到父类中Throwable(可抛).
4.异常的体系:Throwable的子类有 Exception 和 Error.
5.问题的发生是可以抛出的,所以他们的父类是Throwavle,而且这个体系和其它体系都有不同,是因为这个体系中的类以及其对象都具备着可抛性。

6.可抛性:可以被throw或者throws关键字所操作。

		class Demo
		{
			void show(int index)
			{
				int[] arr = new int[3];
				if(index>=arr.length)
					throw new ArrayIndexOutOfBoundsException("数组角标越界啦!!越界角标是:"+index);

				System.out.println(arr[index]);

				System.out.println("haha");
			}
		}

		class  ExceptionDemo
		{
			public static void main(String[] args) 
			{
				Demo d = new Demo();
				d.show(3);
				System.out.println("over");
			}
		}

7.异常分两种:一种是编译时需要被检测的异常,Exception及其子类,可以进行针对性的处理;

一种是编译时不被检测的异常,Exception中一个特殊子类体系RuntimeException,通常不编写处理方式,直接让程序停止,让调用者进行代码的修正。
意味着:我们在自定义异常时,可以继承Exception,也可以继承RuntimeException.

8.针对性处理:可以通过java提供的指定的处理代码完成。
try
{
需要被检测的代码;
}
catch (异常类 变量名)
{
异常的处理代码;
}
finally
{
一定执行的代码;
}

9.异常处理的基本原则:1.在catch异常时,对方功能声明的是什么异常,catch里就处理什么异常,这样处理才具有针对性。
2.如果对方函数声明多个异常,则必须由对个catch分别对这些异常进行处理。
3.如果出现多catch,父类catch则必须放在最下面。


10.异常抛出的基本原则:1.功能中用throw关键字抛出了异常,如果没有被catch处理,就必须用throws关键字在函数上进行声明。


注意:RuntimeException及其子类除外,也就说,功能中throw抛出的是RuntimeException和其子类对象,函数上可以不用throws进行声明。
  函数上用throws进行声明的原因:是为了让调用者在调用该功能时,进行定义预先的处理方式。
11.抛出和try处理:功能内部可以进行处理吗?可以就catch;不可以就必须throws。

12.自定义异常:当在函数内部出现了throw抛出异常对象,那么就必须要给对应的处理动作,一般在函数上用throws关键字标示可能出现异常,好处是可以让调用者预先进行问题的处理。

getMessage:信息;toString:名称+信息;printStackTrace:名称+信息+位置;

	class FuShuException extends Exception
	{
		FuShuException()
		{
			super();
		}
		FuShuException(String message)
		{
			super(message);
		}
	}

	class Demo
	{
		int div(int a,int b)throws FuShuException//在函数上用throws关键字标示有可能有问题。
											//这样的好处在于可以让调用者预先进行问题的处理。
		{
			if(b==0)
				throw new ArithmeticException("哎呀!除数为零了。完了!");//抛出的是java已有的异常的对象。 
			if(b<0)
				throw new FuShuException("除数不可以是负数:错误的负数值时:"+b);//抛出了自定义异常对象。
			return a/b;
		}
	}
	class ExceptionDemo2 
	{
		public static void main(String[] args)throws  FuShuException//主函数调用了有异常的方法,
																//处理方式是声明继续抛出。抛给了jvm
		{
			Demo d = new Demo();
			int num = d.div(4,-1);
			System.out.println("num="+num);
			System.out.println("Hello World!");
		}
	}

13.throw和throws的区别:
throw用在函数内,用于抛出异常对象,后面跟的都是异常的对象。
throws用在函数上,用于声明异常,后面跟的都是异常类,而且可以跟多个,用逗号隔开;

14.小细节:throw在函数中的出现,可以用于结束函数的运行,相当于return。
函数内发生异常函数上不声明,是为了让调用者对代码进行修正,而这种异常都是RuntimeException及其子类。

注意:没catch,没处理。

15.异常讲解常见实例

除数为零,和除数不能为负数。

		class FuShuException extends Exception
		{
			FuShuException()
			{
				super();
			}
			FuShuException(String message)
			{
				super(message);
			}
		}
		class Test
		{
			int div(int a,int b)throws FuShuException//在函数上用throws关键字标示有可能有问题;这样的好处在于可以让调用者预先进行问题的处理。
			{
				if(b==0)
					throw new ArithmeticException("哎呀!除数为零了。完了!");//抛出的是java已有的异常的对象。 
				if(b<0)
					throw new FuShuException("除数不可以是负数:错误的负数值时:"+b);//抛出了自定义异常对象。
				return a/b;
			}
		}
		class ExceptionT 
		{
			public static void main(String[] args)//throws  FuShuException//主函数调用了有异常的方法,处理方式是声明继续抛出。抛给了jvm
			{
				Demo d = new Demo();
				try
				{
					int num = d.div(4,-1);
					System.out.println("num="+num);
				}
				catch (FuShuException e)
				{

					System.out.println("message:"+e.getMessage());//信息
					System.out.println("tostring:"+e.toString());//名称+信息
					e.printStackTrace();//名称+信息+位置。其实jvm的默认处理方式,就是调用了这个方法。
					System.out.println("异常被我抓住啦!!");
				}
				System.out.println("Hello World!");
			}
		}

1 6.finally 语句:这个代码块中定义的是一定会执行的代码。
1.不能被catch块中的return语句结束,可是能被System.exit(0)结束。
2.主要用于关闭资源,只要使用了资源,就一定要将其关闭。
3.应用:数据库的连接,连接——操作——关闭。可能在操作过程中出现异常,没关闭数据库,就需要把关闭数据库放在finally语句里面。


17.组合方式:
try{}catch (){}、try{}catch(){}、try{}finally{}(这种用于关闭资源)

18.异常在覆盖时的细节
1.子类在覆盖父类方法时,如果父类方法抛出了异常,子类覆盖的方法只能抛出父类方法异常或其子类。
2.父类方法如果抛出多个异常,子类在覆盖父类方法时,只能抛出父类异常的子集。
3.如果父类中的方法没有抛出异常,子类覆盖父类时,绝对不能声明异常。只能进行 try{} catch 处理;如果处理不了,那就应该让程序
停掉,让调用者知道。即在catch中抛出RuntimeException异常或其子类对象,这时不用抛,RuntimeException不用在函数上声明。



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值