----------------- android培训、java培训、期待与您交流!-----------------
异常---就是程序运行时出现不正确情况
体系: Throwable-->1 error 2 Exception--> RuntimeException
分类--- 1 系统错误errow 2 异常Exception
对于errow一般编写i针对性的代码对其进行处理
对于Exception 可以使用针对性的代码对其进行处理
体系: Throwable-->1 error 2 Exception--> RuntimeException
分类--- 1 系统错误errow 2 异常Exception
对于errow一般编写i针对性的代码对其进行处理
对于Exception 可以使用针对性的代码对其进行处理
在Java中系统已经分装好了许多的异常类,下面这是一些常见的异常
IOException --FileNotFoundException--IO异常,文件没有找到异常
ClassCastException --强制转换类型的异常
NullPointerException --空指针异常
RuntimeException --运行时异常
StringIndexOutOfBoundsException --字符串索引,超出范围的异常
自定义异常类---------
因为在项目中会出现特有的问题而这些问题并未被java所描述并封装成异常对象
所以对与这些特有的问题可以按照java对问题的分装的思想
将特有的问题,进行自定义的异常封装
--当函数内部出现了throw抛出异常对象,那么 就必须要给对象的处理动作
定义异常信息-----
因为父类已经把异常信息的操作都完成了
所以子类对象只要在构造时, 将异常新类传递给父类通过super语句
那么就可以通过getMessage方法获取自定义的异常信息
注意:1 必须是自定义类继承Exception
继承Exception原因:----
异常体系有一个特点,因为异常类和一次对象都被抛出
他们都具备可抛性,这个可抛性是Threwable这个体系中独有的 特点
ClassCastException --强制转换类型的异常
NullPointerException --空指针异常
RuntimeException --运行时异常
StringIndexOutOfBoundsException --字符串索引,超出范围的异常
自定义异常类---------
因为在项目中会出现特有的问题而这些问题并未被java所描述并封装成异常对象
所以对与这些特有的问题可以按照java对问题的分装的思想
将特有的问题,进行自定义的异常封装
--当函数内部出现了throw抛出异常对象,那么 就必须要给对象的处理动作
定义异常信息-----
因为父类已经把异常信息的操作都完成了
所以子类对象只要在构造时, 将异常新类传递给父类通过super语句
那么就可以通过getMessage方法获取自定义的异常信息
注意:1 必须是自定义类继承Exception
继承Exception原因:----
异常体系有一个特点,因为异常类和一次对象都被抛出
他们都具备可抛性,这个可抛性是Threwable这个体系中独有的 特点
下面看个自定义的异常类
class FushuException extends Exception{
private static final long serialVersionUID = 1L;
FushuException(String msg){
super(msg); //实现父类Exception的构造方法
}
}
在抛出异常时有2种情况这就是throw与throws
throws 与 throw 的区别:
1 throws 使用在函数上
1 throws 使用在函数上
2 throw 使用在函数内
3 throws后面跟的异常类,可以跟多个用逗号隔开
RuntimeException---------
Exception 中有一个特殊的子类异常RuntiomeException运行时异常
如果在该函数内容抛出该异常,函数上可以不用申明,编译一样通过
如果在函数上申明了该异常,调用者可以不用进行处理,编译一样通过
异常的处理 ----
3 throws后面跟的异常类,可以跟多个用逗号隔开
RuntimeException---------
Exception 中有一个特殊的子类异常RuntiomeException运行时异常
如果在该函数内容抛出该异常,函数上可以不用申明,编译一样通过
如果在函数上申明了该异常,调用者可以不用进行处理,编译一样通过
异常的处理 ----
1 抛出异常,将异常抛给使用这方法的对象处理
2 捕获异常处理:
try{
//发生异常的代码块
}catch(xxException e){
//发生异常的处理代码
}finally{
//不论异常是否发生,都需要执行的代码。finally代码块可以不写
}
多异常的处理------
1 申明异常时,建议申明更为具体的异常,这样处理的可以更具体
2 对方什么几个异常,就对应有几个cath块---如果几个cath块中的异常对象出现继承关系
父类异常catch块放在最下面
代码演示
class FushuException extends Exception{
private static final long serialVersionUID = 1L;
FushuException(String msg){
super(msg); //实现父类Exception的构造方法
}
}
class demoP{
int dee(int a ,int b) throws FushuException{
if (b<0)
throw new FushuException("出现了除数是负数的情况-----/by fushu"+b);
//手动通过throw关键字抛出一个异常对象
return a/b;
}
}
public class ExceptionDemo {
public static void main(String[] args) {
demoP demoP =new demoP();
//try,catch代码块
try {
int x ;
x = demoP.dee(4,-1);
} catch (FushuException e) {
System.out.println("除数出现负数了");
}catch (Exception e) {
e.toString();
}finally{
/**
* finally代码块,定义一定要执行的代码
* 通常用于关闭资源
* ef : 数据关闭,文件流关闭
*/
System.out.println("finally");
}
}
}
在进行异常处理时要 注意的是:--
1 子类在覆盖父类时,如果父类的方法抛出异常,那么子类的覆盖方法只能抛出父类的异常或该异常的子类
2 如果父类方法抛出多个异常,那么子类在覆盖该方法时只能抛出父类异常的子集
3 如果父类或者接口的方法中没有异常抛出,那么子类在覆盖方法时不能抛出异常,
如果子类发生了异常,就必须要进行try处理,绝对不能抛异常。
2 如果父类方法抛出多个异常,那么子类在覆盖该方法时只能抛出父类异常的子集
3 如果父类或者接口的方法中没有异常抛出,那么子类在覆盖方法时不能抛出异常,
如果子类发生了异常,就必须要进行try处理,绝对不能抛异常。