黑马程序员-第八(异常)

---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------

一,异常
1,定义 :就是程序运行时出现不正常情况 
2,异常的由来:问题是现实生活中一个具体的事物,也可以通过java的类的形式进行描述,并封装成对象
其实就是java对不正常情况进行描述后的对象体现。
3,对问题的分类 :
·对于严重的问题:java通过Error类进行描述 
对Error一般不编写针对性的代码对其进行处理
·对于非严重的问题:java通过Exception类进行描述
对于Exception可以使用针对性的处理方式进行处理。
二,对异常的处理
 1,格式 :try{需要被检测的代码} catch(异常类 变量){处理异常的代码(处理方式} finally{一定会执行的语句}
 2,异常类中常用的方法:
  ·String getMessage():获取异常信息
  ·String toString();返回异常的简短描述 异常名称+异常信息
  ·void printStackTrace():打印堆栈中的跟踪信息。异常名称+异常信息+异常出现的位置 
  其实jvm默认的异常处理机制,就是在调用printStackTrace方法,打印堆栈内的跟踪信息。
三,异常的声明
1,throws :在功能上通过throws关键字声明该功能可能会出现问题,
四,对多异常的处理:
1,声明异常时,建议声明更为具体的异常,这样处理的可以更具体。
2,对方声明几个异常,就对应有几个catch块,不要定义多余的catch块,如果多个catch块中的异常出现继承关系,父类异常catch块放在最下面。
注:建议在进行catch处理时,catch中一定要定义具体处理方式,不要简单定义一句e.printStackTrace()也不要简单的就写一个条输出语句。

处理异常方式:1,用一个文件记录下这些异常(称异常日志文件)


五,自定义异常
1,自定义异常只能通过throw手动抛出,java中的异常既可以手动抛出,也可以通过throws自动抛出
  2,当在函数内部出现了throw抛出异常对象,那么就必须要给对应的处理动作:
  1,要么在内部try catch处理
  2.要么在函数上声明让调用者处理
  3,如何定义异常信息?
  因为父类中已经把异常信息的操作都完成了,所以子类只要在构造时,将异常信息传递给父类通过spuer语句,那么
  就可以直接通过getMessage()方法获取自定义的异常信息。
 
  注:自定义异常必须继承Exception
 
  4,继承Exception原因:
  异常体系有一个特点:因为异常在和异常对象都被抛出。他们都具备可抛性,这个可抛性是Throwable这个体系中独有特点。
  只有这个体系中的类和对象才可以被throws和trhow操作。
  5,注:自定义异常时,如果该异常的发生,无法在继续进行运算,就让自定义异常继承RuntimeException
六,throws 和 throw 的区别:
1,throws:使用在函数上,throw:使用在函数内
2,throws:后面跟的是异常类,可以跟多个,用逗号隔开。throw:后面跟的是异常类的对象。
七,运行时异常(RuntimeException)
1,Exception中有一个特殊的子类异常RuntimeException运行时异常
2,如果在函数内容抛出该异常,函数上可以不用声明,编译一样通过,如果在函数上声明了该异常,调用者可以不用进行
处理,编译一样通过 。之所以不用在函数声明,是因为不需要让调用者处理,当该异常发生,希望程序停止,因为在运行时,出现了
无法继续运算的情况 ,希望停止程序后,对代码进行修改。
八,finally
1,finally 代码块:里存放一定会执行的代码。通常用于关闭资源。
注意:
1,finally中定义的通常是关闭资源代码,因为资源必须释放 。
2,finally 只有一种情况不会执行,当执行到System.exit(0);finally不会执行。
九,异常在子父类覆盖中的体现
1,子类在覆盖父类时,如果父类的方法抛出异常,那么子类的覆盖方法,只能抛出父类的异常或者该异常的子类。如:
class AException extends Exception{
}
class BException extends AException{
}
class CException {
}
class Fu{
public void show(Fu fu)throws AException
{
}
}
class Zi{
publicvoid show(Fu fu)//些时子类中的show方法可以抛AException或BException异常。
{
}
}
class Demo{
public static void main(String[] args){
Zi zi = new Zi();
try{

zi.show(new Zi());
}
catch(只能写父类中与show抛出的相同异常或者show抛出异常的父类。){

}

}
}
2,如果父类方法抛出多个异常,那么子类在覆盖该方法时,只能抛出父类异常的子集。
当上述程序父类的show方法抛出AException,BException两个异常时,子类在复写时,只能抛出AException,或BException或者两个都抛
3,如果父类或者接口的方法中没有异常的抛出,那么子类在覆盖方法时,也不可以抛出异常,如果
子类方法发生了异常,就必须要进行try处理,绝对不能抛。
当子类中的show 发了CException时,只能 在子类 中进行处理。
十,异常的好处:
1,将问题进行封装,
2,装饰正常流程代码和问题处理代码相分离,方便于阅读。

---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------

发布了48 篇原创文章 · 获赞 0 · 访问量 3万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章