黑马软件工程师_错误机制

黑马程序员__异常机制
----------- android培训java培训、java学习型技术博客、期待与您交流! ------------


什么是异常?
异常是程序在运行中出现的非正常状态。

异常体系
Throwable
  |--Error
  |--Exception
       |--RuntimeException

error和exception的区别?
error表示恢复不是不可能但是很困难的情况下的一种严重问题,比如内存溢出不可能指望程序能够处理。
exception是实现或设计问题,也就是说如果程序运行正常,从不会发生的情况。

运行时异常和一般异常的区别?
异常是程序运行中出现的非正常状态。运行时异常是java虚拟机的通常操作中出现的异常,是一种常见的运行错误。java编译器要求方法必须声明或抛出可能发生的非运行时异常,但不要求必须声明抛出未被捕获的运行时异常。

throw和throws关键字
throw:在方法内抛出异常对象。
throws:在方法上声明可能发生的异常。

异常处理语句格式
//格式一
try
{
	
}
catch ()
{
}
//格式二
try
{
	
}
catch ()
{
}
finally
{

}
//格式三
try
{
	
}
finally
{
}

finally表示总是被执行,通常在里面做关闭资源的动作。只有遇到Sytem.exit(0);语句时finally语句不会被执行。
如果没有对异常进行处理,虚拟机进行默认处理,调用默认异常处理机制,程序终止。

多异常处理
1.声明异常时,建议声明更为具体的异常,这样处理更具体
2.对方声明几个异常,就对应几个catch块
  如果对个catch中的异常出现继承关系,父类异常catch块放在最下面,不要定义多余的
  catch块。

自定义异常
因为项目中会出现特有的问题,而这些问题未被java所描述并封装对象,所以对于这些特有问题可以按照java对问题封装思想。将特有问题进行自定义的异常封装。这就是自定义异常。必须继承Exception、

自定义异常信息
因为父类已经将异常信息的操作(如getMessage)都完成了,所以子类只要在构造时,将异常信息传递给父类通过super语句,那么就可以直接通过getMessage方法获取自定义的异常信息。
class FuShuException extends Exception
{
	FuShuException(String msg)
	{
		super(msg);
	}
}

class ExceptionTest
{

	try
	{
		//捕获异常
	}
	catch (FuShuException e)//异常处理
	{
		System.out.println(e.toString());
	}
}


自定义异常时如果该异常发生,无法在继续进行运算(错误运算没有意义),就让自定义异常继承RuntimeException。

异常在子父类中的体现
1.子类在覆盖父类时,如果父类的方法抛出异常,那么子类的覆盖方法,只能抛出父类的异
   常或父类异常的子类,其他异常必须进行异常处理。
2.如果父类方法出现多个异常,那么子类在覆盖时,只能抛出父类异常的子集。
3.如果父类或接口的方法中没有异常抛出,那么子类在覆盖方法时,也不可以抛出异常,如果子类发生了异常,就必须要进行try处理,绝对不能抛。

异常的好处
1.将问题进行封装
2.将正常流程代码和问题处理代码分离

异常处理原则
1.处理方式有两种,声明或捕获(try或throws)
2.调用到抛出异常的功能时,抛出几个就处理几个,一个try对应多个catch
3.多个cantch,父类的catch放到最下面
4.catch内,需要定义针对性处理方式,不要简单定义printStackTrace输出语句,也不要
  不写,当捕获到异常,本地功能处理不了,可以继续在catch中抛出。


----------- android培训java培训、java学习型技术博客、期待与您交流! ------------