黑马程序员——面向对象之异常(一)

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

一、概述

异常就是程序运行不正常的情况。也称问题,是现实生活中一个具体的事物,也可以通过java的类的形式来进行描述,并封装成对象。其实就是java对不正常情况描述后的对象体现。

对于问题化分有两种,一种是严重(Errow类),一种是非严重(Exception)类。对于Errow类的问题一般不编写针对性的代码对其进行处理         对于非严重,java用Exception类来描述对于Exception类可以进行针对性的处理方式进行处理无论Errow还是Exception都具有一些共性内容比如不正常的信息、引发原因等。类中的所属关系如下:

throwable

          |---Errow

          |---Exception

对于异常的处理:jvm提供了特有的异常处理机制

try

{

         需要被检测异常代码

}

catch(异常类型 变量)

{

         处理异常的代码(处理方式)

}

finally

{

         一定会执行的语句

}

class Demo
{
	public int div(int a ,int b) throws Exception //在功能上通过throw关键字申明了该功能有可能出现问题
	{
		return a/b;
	}
}
class ExceptionDemo 
{
	public static void main(String[] args)  //throws Exception//可以继续抛出,最后由jvm来处理。但一般自己处理
	{
		//System.out.println("a/b="+new Demo().div(4,0));//【ArithmeticException: / by zero】
		try
		{
			System.out.println("a/b="+new Demo().div(4,0));
		}
		catch (Exception e)
		{
			System.out.println("出错啦!!");
			System.out.println("Over");
			System.out.println(e.getMessage());// / by zero
			System.out.println(e.toString());//异常名:异常信息
			e.printStackTrace();//异常名 异常信息 异常位置
								//其实jvm默认的异常处理机制,就是调用printStackTrace方法,打印异常的堆栈跟踪信息
		}
	}
}


 

二、对多异常处理:

1.申明异常时,建议申明更为具休的异常,这样处理起来更为具体。

2.对方申明几个异常,就对应几个catch块,不要定义多余的catch块

如果多个catch块出现继承关系,那么把父类块放在最下面

建议在处理catch块时,catch中一定要有具体处理方式

不要简单定一句e.printStackTrice()

也不要简单书写一条语句。

class Demo
{
	public int div(int a ,int b) throws ArithmeticException,ArrayIndexOutOfBoundsException//在功能上通过throw关键字申明了该功能有可能出现问题
	{
		int [] arr = new int[a];
		System.out.println(arr[4]);		
		return a/b;
		
	}
}
class ExceptionDemo2 
{
	public static void main(String[] args)  //throws Exception//可以继续抛出,最后由jvm来处理。但一般自己处理
	{
		//System.out.println("a/b="+new Demo().div(4,0));//【ArithmeticException: / by zero】
		try
		{
			System.out.println("a/b="+new Demo().div(4,0));			
		}
		catch (ArithmeticException e)
		{
			System.out.println("出错啦!!");
			System.out.println("Over");
			
		}
		catch (ArrayIndexOutOfBoundsException e)
		{
				System.out.println("角标越界啦!!");
				System.out.println("Over");
					
		}
		catch (Exception e)//多态
		{
			System.out.println("出错啦!!");
			System.out.println("Over");
			
		}
	}
}


三、自定义异常

因为项目中会出现特有问题,而这些问题并java所描述并封装。所以对于这些特有问题可以按照java的对问题的封装的思想,将特有的问题进行自定义异常的封装。

当在函数内部出现了throw抛出异常对象,那么必须给出相应处理动作,不然编译会出错。要么在在函数内部try catch处理,要么在函数上申明让调用者处理一般情况函数内部出现异常,在函数上申明。自定义异常必须是自定义类继承Exception。

继承Exception的原因:异常体系有个特点,因为异常类和异常对你都被抛出它们都具备可抛性,这个可抛性是throwable中特有的特点只有这个体系中的类和对象才能被throw和throws所操作

throw 和throws的区别:

throws用在函数上,throw用在函数内;

throws 后面跟异常类,可以跟多个类,用逗号隔开;

throw后面跟的是异常对像;

class FushuException extends Exception
{
	private int value ;
	/*
	private String msg;	
	FushuException(String msg)
	{
		this.msg = msg ;
	}
	public String getMsg()
	{
		return msg;
	}
	*/

	FushuException(String msg,int value)
	{
		super(msg);//因为父类中已经把异常信息的操作都已经完成了,所以只需将信息传给父类就行。
		this.value = value;
	}

	public int getValue()
	{		
				
		return value;		
	}

}

class Demo 
{
	public int div(int a,int b) throws FushuException
	{
		if(b<0)
		{
			throw new FushuException("除数不能为负数",b);
		}
		return a/b;
	}
}
class ExceptionDemo3 
{
	public static void main(String[] args) 
	{
		Demo d = new Demo();
		try
		{
			int x = d.div(4,-1);
			System.out.println(x);
		}
		catch (FushuException e)
		{
			System.out.println(e.toString());
			//FushuException x = new FushuException();
			//System.out.println(e.getMsg());	
			System.out.println("错误的负数是:"+e.getValue());
			
			
		}
		
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值