黑马程序员——Java基础——异常体系

点击打开链接 点击打开链接 点击打开链接 android培训、<a">点击打开链接 点击打开链接 java培训、期待与您交流!">点击打开链接 点击打开链接

异常

异常的体系

 Throwable

   Error

     通常出现重大问题如:运行的类不存在或者内存溢出等

     不编写针对代码对其处理

   Exception

     在运行时运行出现异常的情况,可以通过try catch finally进行处理

ExceptionError的子类名都是以父类名作为后缀。

 

异常就是运行时出现不正常情况

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

对问题划分

一种是严重的问题:java通过Error类进行描述,对于Error一般不编写针对性代码进行处理

一种是非严重的问题:java通过Exception类进行描述,对于Exception可以使用针对性处理方式进行处理。

 

异常的处理

try

{

   需要被检测的代码;

}

catch (异常类 变量)

{

   处理异常的代码;

}

finally

{

   一定会执行的语句;只有System.exit(0)不会执行。

}

对捕获到的异常对象进行常见方法操作

string   getMessage():获取异常信息

string   toString()  异常名称:异常信息

void    printstackTrace()  异常名称:异常信息,异常出现的位置

Throwable fillInStackTrace()  在异常堆栈跟踪中填充

Throwable getCause()  返回此Throwablecause,如果不存在或未知,则返回null

 

   其实JVM默认的异常机制就是在调用printStackTrace方法,打印异常的堆栈的跟踪信息。

 

int div(int a,intb) throws Exception 在功能上通过throws的关键字声明了该功能有可能出现的问题。

在函数上申明异常:便于提高安全性,让调用出进行处理,不处理则编译失败。

 

对多异常的处理

1.声明异常时,建议声明更为具体的异常,这样处理可以更为具体

2.对方声明几个异常,就对应有几个catch块,如果多个catch块中的异常出现继承关系,父类异常catch块放在最下面。

3.建议在进行catch处理时,catch中一定要定义具体处理方式,不要简单定义一句e.printStackTrace().

 

自定义异常:

   对特有的问题可以按照java的对问题封装的思想,将特有的问题进行自定义的异常封装。

 

当在函数内部出现了throw抛出异常对象,那么就必须要给出对应的处理动作。

要么在内部try catch 处理

要么在函数上申明让调用者处理

一般情况,在函数内出现异常,函数上需要声明

 

如何定义异常信息

因为父类中已经把异常的操作都完成了,所以子类只要在构造时,将异常信息传递给父类,通过super语句,那么就可以直接通过getMessage()获取异常信息。

 

自定义异常:必须是自定义类继承Exception

原因:异常体系有一个特点,异常类和对象都被抛出,他们都具备可抛性,可抛性是Throwable这个体系独有的特点,只有这个体系中的类和对象才可以被throwthrows操作。

Test7

 

class Test7 
{
     public static void main(String[] args)
	{ 
		 Demo d=new Demo();
		 try
		 {
			int x=d.div(4,-2);
			System.out.println("x=="+x);
		 }
		 catch (FushuException e)
		 {
			 System.out.println(e.getMessage());
			 System.out.println(e.getValue());
		 }

	}
}

//自定义异常类必须继承Exception
class FushuException extends Exception
{
	private int value;
	FushuException(String msg,int value)
	{
		//调用父类的构造函数,将异常信息传递给父类。
		super(msg);
		this.value=value;
	}
	public int getValue()
	{
		return value;
	}
}

class Demo
{
	int div(int a,int b) throws FushuException
	{
		if(b<0)
			throw new FushuException("出现负数啦",b); //手动通过throw关键字抛出负数异常对象
		return a/b;
	}
}


throwthrows的区别

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

throws后跟的是异常类,可以跟多个,用,隔开;throw后跟的是异常对象。

 

RuntimeException  运行时异常

如果在函数内抛出该异常,函数上可以不用声明,编译一样通过

如果在函数上声明了该异常,调用者可以不用处理,编译一样通过。

 

   之所以不用在函数上声明,是因为不需要让调用者处理。当该异常发生,希望程序停止。因为在运行时,出现了无法继续运行的情况,希望程序停止,对代码进行修正。

自定义异常时,如果该异常的发生,无法继续进行运算,就让自定义异常继承RunTimeException

 

异常:编译时被检测异常

      编译时不被检测的异常(运行时异常,RunTimeException及其子类)

finally中存放的是一定会被执行的语句。

finally 代码块:定义一定执行的代码,通常用于关闭资源。

三种格式

try{}              try{}                   try{}

catch(){}      catch(){}             finally{}

                   finally{}

   catch是用于处理异常的,如果没有catch就代表异常没有被处理,如果该异常是检测时异常,必须声明.

 

异常在子父类中覆盖的体现

1.子类在覆盖父类时,如果父类的方法抛出异常,那么子类的覆盖方法自能抛出父类的异常或该异常的子类。

2.如果父类方法抛出多个异常,那么子类覆盖方法时,只鞥抛出父类异常的子集。

3.如果父类或者接口的方法没有异常抛出,那么子类在覆盖方法时,也不可以抛出异常。

如果子类方法发生了异常,就必须进行try处理绝对不能抛。

 

注意:finally中定义的通常是关闭资源代码,因为资源必须释放

Finally只有一种情况不会执行,当执行到System.exit(0),finally不会执行。

 

异常的好处

1.将问题进行封装

2.将正常流程代码和问题处理代码相分离,方便于阅读

 

异常的处理原则:

1.处理方式有两种:trycatch

2.调用到抛出异常的功能时,抛出几个,处理几个。一个try对于多个catch

3.多个catch,父类的catch放到最下面

4.Catch内,需要定义针对性的处理方式,不要简单的定义printStackTrace输出语句。也不要不写

  当捕获到的异常,本功能处理不了时,可以继续在catch中抛出

try

{

   throw new AException();

}

catchAException e

{

    throw e;

}

如果该异常处理不了,但并不属于该功能出现的异常,可以将异常转换后,再抛出和该功能相关的异常。

或者异常可以处理,当需要将异常产生的和本功能相关的问题提供出去。当调用者知道,并处理,也可以将捕获异常处理好,转换新的异常。

try

{

    throw new AException();

}

catch(AException e)

{

//AException处理

throw new BException();

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值