黑马程序员--异常类

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



异常---就是程序运行时出现不正确情况
体系:     Throwable-->1 error       2 Exception--> RuntimeException
分类---  1  系统错误errow   2  异常Exception
对于errow一般编写i针对性的代码对其进行处理
对于Exception 可以使用针对性的代码对其进行处理

在Java中系统已经分装好了许多的异常类,下面这是一些常见的异常
IOException --FileNotFoundException--IO异常,文件没有找到异常
ClassCastException    --强制转换类型的异常
NullPointerException    --空指针异常
RuntimeException        --运行时异常
StringIndexOutOfBoundsException  --字符串索引,超出范围的异常


自定义异常类---------
因为在项目中会出现特有的问题而这些问题并未被java所描述并封装成异常对象
所以对与这些特有的问题可以按照java对问题的分装的思想
将特有的问题,进行自定义的异常封装
--当函数内部出现了throw抛出异常对象,那么 就必须要给对象的处理动作
定义异常信息-----
因为父类已经把异常信息的操作都完成了
所以子类对象只要在构造时, 将异常新类传递给父类通过super语句
那么就可以通过getMessage方法获取自定义的异常信息

注意:1  必须是自定义类继承Exception
继承Exception原因:----
异常体系有一个特点,因为异常类和一次对象都被抛出
他们都具备可抛性,这个可抛性是Threwable这个体系中独有的 特点
下面看个自定义的异常类
class FushuException extends Exception{
	private static final long serialVersionUID = 1L;
	FushuException(String msg){
		super(msg);  //实现父类Exception的构造方法
	}
}

在抛出异常时有2种情况这就是throw与throws
throws  与  throw  的区别:
1  throws 使用在函数上  
2  throw  使用在函数内
3  throws后面跟的异常类,可以跟多个用逗号隔开


RuntimeException---------
Exception 中有一个特殊的子类异常RuntiomeException运行时异常
如果在该函数内容抛出该异常,函数上可以不用申明,编译一样通过
如果在函数上申明了该异常,调用者可以不用进行处理,编译一样通过

异常的处理  ----
1   抛出异常,将异常抛给使用这方法的对象处理
2   捕获异常处理:
     try{
     //发生异常的代码块
     }catch(xxException   e){
         //发生异常的处理代码
    }finally{
    //不论异常是否发生,都需要执行的代码。finally代码块可以不写
    }

多异常的处理------
1  申明异常时,建议申明更为具体的异常,这样处理的可以更具体
2  对方什么几个异常,就对应有几个cath块---如果几个cath块中的异常对象出现继承关系
父类异常catch块放在最下面  

代码演示
class FushuException extends Exception{
	private static final long serialVersionUID = 1L;
	FushuException(String msg){
		super(msg);  //实现父类Exception的构造方法
	}
}

class demoP{
	
	int dee(int a ,int b) throws FushuException{
		if (b<0)
			throw new FushuException("出现了除数是负数的情况-----/by  fushu"+b);
		//手动通过throw关键字抛出一个异常对象
		return a/b;
	}
}

public class ExceptionDemo {

	public static void main(String[] args) {
		demoP demoP =new demoP();
		//try,catch代码块
		try {
			int x ;
			x = demoP.dee(4,-1);
		} catch (FushuException e) {
			System.out.println("除数出现负数了");
		}catch (Exception e) {
			e.toString();
		}finally{
			/**
			 *  finally代码块,定义一定要执行的代码
			 *  通常用于关闭资源
			 *  ef :  数据关闭,文件流关闭
			 */
			System.out.println("finally");
		}
	}
}

在进行异常处理时要 注意的是:--
1  子类在覆盖父类时,如果父类的方法抛出异常,那么子类的覆盖方法只能抛出父类的异常或该异常的子类
2  如果父类方法抛出多个异常,那么子类在覆盖该方法时只能抛出父类异常的子集
3 如果父类或者接口的方法中没有异常抛出,那么子类在覆盖方法时不能抛出异常,
如果子类发生了异常,就必须要进行try处理,绝对不能抛异常。







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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值