异常的定义:程序在运行时出现不正常的情况。异常的由来:问题也是现实中的一类事物,也可以通过Java的类的形式进行描述。并封装成对象。其实就是Java对不正常情况进行描述后的对象体现。对于问题划分:一种严重的问题,一种非严重的问题。严重的:通过erro类进行描述,不进行针对行处理。非严重的。通过exception类型进行描述,通过exception可以进行针对性处理。
NullpointerException空指针异常。
ClassCastException类型转化异常。
ArithmeticException算术异常ArithmeticException: / by zero。
ArrayIndexOutOfBoundsException: 数组越界异常
Error或者exception有一些共性throwable 包
一,异常的处理:Java提供了特有的语句:try
{需要检测的代码}
catch(异常类 变量)
{异常的代码处理对捕获到的对象进行常见方法操作。
System.out.println(e.getMessage());// by zero异常信息
System.out.println(e.toString());//java.lang.ArithmeticException:
异常名字 异常信息
e.printStackTrace();//异常名称 异常信息 异常位置是jvm默认的异常处理就是再调用printStackTrace();}
finally{一定会执行的语句。finally中写入关闭程序的代码,通常用于关闭程序,释放资源。}catch(Exception e)e是Exception类型的对象。
67,抛出异常throws exception int div (int a,int b) throws Exception在功能上通过throws声明有可能出现问题提醒调用者必须处理异常。main(String[] args)throws Exception把问题抛给了虚拟机处理。
二,对多异常的处理
1,声明异常时,建议声明更为具体的异常int div (int a,int b) throws ArithmeticException更为具体的异常类型。函数中有异常发生就不再处理后面的语句。
2,对方声明几个异常就要就对应几个catch块,如果多个catch块出现继承关系,父类catch放在后面。
三,自定义异常:因为项目终会出现特有的问题,而这些问题并没有被Java所描述封装。所以对于这些特有的问题可以按照Java的对问题封装的封装。当函数的内部出现了throw抛出异常, throw new FushuException();//手动通过throw关键字抛出自定义异常。就必须要给对应的处理动作两种方法:一要么内部try..catch.二调用者处理。一般情况函数内部出现问题一定要声明出来int div (int a,int b) throws FushuException()
自定义异常:必须是自定义类继承Exception;原因:异常类和异常对象都需要被抛出,他们都具备可抛性。是throwable的独有特性。 System.out.println(e.get();); 出现错误原因:e.get();含有单独输出语句。
四,throws和throw区别:1,throws使用在函数上,throw在函数内2,throws后面跟异常类可以多个div (int a,int b) throws用逗号隔开。Throw跟的是异常对象throw new FushuException();
五,Exception中一个特殊的子类异常RuntimeException的本身以及子类运行异常,如果函数内抛出该异常函数上是不需要声明出来。之所以不在函数上声明不需要调用者调用。
六,自定义异常:如果该异常发生,无法继续进行运算,就让自定义异常继承RuntimeException
异常分类:1,编译被检测的异常,2,编译不被检测异常就是RuntimeException。
四种:1,try{}catch{异常的代码处理},2,try{}catch{异常的代码处理}finally{关闭资源},3,try{}finally{关闭资源},4,try{}catch{异常的代码处理}。。。catch{异常的代码处理}catch{异常的代码处理}。
七,异常在子父类中覆盖的体现:1,子类在覆盖父类时,如果父类的方法抛出异常,那么子类的覆盖方法,只能抛出父类的异常或者该父类的子异常。2,父类方法抛出多个异常,子类在覆盖该方法时,只能抛出父类异常子集。3,如果父类或者接口的方法没有异常抛出,那么子类在覆盖方法是,也不可以抛出异常。如果子类发生异常不能抛出必须进行try处理。
八, 异常:对问题的描述。并将问题进行对象的封装。
异常体系;throwable>>erro、exception>>runtime exception.
异常有两种:1,编译时被检测异常2,运行时异常(编译时不检测)
Finally只有一种情况不能执行system。Exit(0);jvm退出。
Catch{一般要写如处理方式比如信息,名称,位置。等}。
九,异常的注意事项:子父类覆盖时:1,子类抛出的异常必须是父类的异常的子类或者子集2,如果父类或者接口没有抛出异常时,子类覆盖出现异常不能抛出异常。 |