异常

异常: 程序在运行时出现不正常的情况      Throwable

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

问题划分:
                 严重的:
  Error  一般不编写针对性的代码进行处理

           非严重的:Exception   可以使用针对性的处理方式进行处理  

         异常有俩种:

             编译时被检测异常

                      该异常在编译时如果没有处理,那么编译失败

                      该异常被标示,代表着可以被处理

             运行时异常(编译时不检测)

                      在编译时不需要处理,编译器不检查

                      该异常发生,建议不处理,让程序停止,需要对代码进行修改。 


异常  对问题的描述,将问题进行对象的封装

异常体系 throwable

                  --Error

                  --Exception

                             ---RuntimeException

异常体系的特点:异常体系中的所有类以及建立的对象都具备可抛性

                       也就是说能被throwthrows关键字所操作

                       只有异常体系具备这个特点

throw定义在函数内 用于抛出异常对象  throws定义在方法上,用于抛出异常类,可以抛出多个用逗号隔开

当方法内容有throw抛出异常对象,未进行try处理,必须在方法上声明,否则编译失败

注意:RuntimeException除外,  方法内如果抛出的是RuntimeException异常,方法可以不用声明

如果方法上声明了异常,调用者需要进行处理,处理方法可以throws(抛)和try


try{

      需要被检测的代码

}

Catch(){

      处理异常的代码

}

finally{

      如果在catch中执行 System.exit0);//虚拟机结束则不执行finally中的代码

      一定会执行的语句

      关闭资源代码,资源必须被释放。

}

自定义异常:

           定义类继承Exception或者RuntimeException

1.      为了让该自定义类具备可抛性

2.      让该类具备操作异常的共性方法

当要定义自定义异常的信息时,可以使用父类已经定义好的功能

异常信息传递给父类的构造方法

calss  MyException extends  Exception{

      MyExceptionString message{

           supermessage);

}

}

自定义异常:按照java面向对象的思想,将程序中出现的特有问题进行封装

异常的好处:

1.      将问题进行封装

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

处理原则:

1.      处理方式有俩种 trythrows

2.      调用到抛出异常的功能时,抛出几个就处理几个

   一个try对应多个catch

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

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

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

            try{

                 throw  new AException();

}catchAException e{

      throw  e

}

如果该异常处理不了,但不属于该功能出现的异常,可以将异常转换后,在抛出和该功能相关的异常。综合异常可以处理,当需要将异常产生的和本功能相关的问题提供出去,让调用者知道并处理,也可以将捕获异常处理后,转换新的异常抛出

try{

                 throw  new AException();

}catchAException e{

//还可以对AException处理再抛

      throw  new BException();

}

异常注意事项:

 1.如果该异常是检测时异常,那么必须声明  

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

 3.在函数上声明异常 便于提高安全性,让调用者进行处理,不处理编译失败   

 4.finally中的存放的是一定会执行的语句  通常用于关闭资源

 5.catch用于处理异常,如果没有catch就代表没有被处理过,


 
对于多异常的处理

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

2.      对方声明几个异常,就对应几个catch块

如果多个catch块中的异常出现继承关系,父类异常放在最后面


Exception中的RuntimeException  (运行时异常)

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

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

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

throw 和throws区别  

       1. throw  语句抛出一个异常        使用在方法内  后面跟的是异常对象

    throws 方法抛出一个异常        使用在方法上  后面跟的是异常类    可以多个   多个时用逗号隔开

 2.throws可以单独使用,由处理异常的方法捕获,但throw不能;

3.throw要么和try-catch-finally语句配套使用,要么与throws配套使用。


 
try、catch、finally分别在什么情况下使用

1.将可能引发的异常代码放在try语句中

2.catch用于处理异常,如果没有catch就代表没有被处理过    

catch语句可以有多个,分别处理不同异常  父类异常放在代码最下面

3.finally 中的存放的是一定会执行的语句  通常用于关闭资源 

 如果在catch中执行 System.exit(0);虚拟机结束则不执行finally中的代码

三种格式:

            try{}catch(){}

            try{}finally{}

            try{}catch(){} finally{} 


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

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

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

3.      如果父类或者接口的方法中没有异常抛出,那么子类在覆盖方法时,也不可以抛出异常,如果子类方法发生了异常,就必须进行try处理,绝对不能抛 

 .getMessage()    获取异常信息
 
.printStackTrace() 异常名称 异常信息  异常出现的位置
 
其实jvm默认的异常处理机制,就是在调用printStackTrace方法,打印异常的堆栈的跟踪信息

异常类体系
  在Java 语言中代表异常时,不再使用数字来代表各种异常的情况,而是使用一个专门的类来代表一种特定的异常情况,在系统中传递的异常情况就是该类的对象,所有代表异常的类组成的体系就是Java 语言中的异常类体系。
为了方便对于这些可传递对象的管理,Java API 中专门设计了java.lang.Throwable 类,只有该类子类的对象才可以在系统的异常传递体系中进行。该类的两个子类分别是:
 

1.Error 类
  该类代表错误,指程序无法恢复的异常情况。对于所有错误类型以及其子类,都不要求程序进行处理。常见的Error 类例如内存溢出StackOverflowError 等。
 

2.Exception 类
   该类代表异常,指程序有可能恢复的异常情况。该类就是整个Java 语言异常类体系中的父类。使用该类,可以代表所有异常的情况。
在Java API 中,声明了几百个Exception 的子类分别来代表各种各样的常见异常情况,这些类根据需要代表的情况位于不同的包中,这些类的类名均以Exception 作为类名的后缀。如果遇到的异常情况,Java API 中没有对应的异常类进行代表,也可以声明新的异常类来代表特定的情况。
在这些异常类中,根据是否是程序自身导致的异常,将所有的异常类分为两种:编译时异常和运行时异常
 

3.RuntimeException 及其所有子类
该类异常属于程序运行时异常,也就是由于程序自身的问题导致产生的异常,例如数组下标越界异常ArrayIndexOutOfBoundsException 等。
该类异常在语法上不强制程序员必须处理,即使不处理这样的异常也不会出现语法错误。

1.其它Exception 子类
该类异常属于程序外部的问题引起的异常,也就是由于程序运行时某些外部问题导致产生的异常,例如文件不存在异常FileNotFoundException 等。
该类异常在语法上强制程序员必须进行处理,如果不进行处理则会出现语法错误。
熟悉异常类的分类,将有助于后续语法中的处理,也使得在使用异常类时可以选择恰当的异常类类型。
由于异常类的数量非常多,在实际使用时需要经常查阅异常类的文档,

图片