异常总结

异常类有两个来源:
是java语言本身定义的一些基本的异常类型
是用户通过继承Exception类或者其子类自己定义的一些异常。Exception类及其子类是Throwable的一种形式,他指出了合理的应用程序想要捕获的条件。

异常对象:
java运行时环境自动抛出系统生成的异常而不管你是否愿意捕获和处理。他总要被抛出,
是程序员自己抛出的异常,这个异常可以是程序员自己定义的,也可以使java语言
异常分两类
强制性异常:在编译过程中必须处理,如文件异常等问题,也可能是自定义的异常
非强制性异常:在执行时才报错,如数组越界问题
具体代码如下:
//非强制性异常
String[] str=new String[]{"1","2","3"};
System.out.println(str[3]);
//编译执行时系统报错:数组越界

处理强制性异常时有两种方式:
使用try··catch机制:
可以在遇到异常时就处理它,常用的方式
使用throws关键字:
throws Exception:将这个异常向上抛,如果可能异常是在一个方法里出现的,则使用这个方法将异常抛给调用该方法时去处理,而调用该方法时还可以将此异常继续向调用该方法的函数处理,直至异常抛给了main方法为止,main方法是异常的最总接收者,main方法接收异常后就将异常交给虚拟机处理,相当于在虚拟机中采用了try··catch机制,最后将出现异常的具体情况输出。

自定义一个异常处理方法
使用throw关键字:
在该方法中定义一个异常抛出用语句:throw new Exception("出现异常时要输出的内容");
然后再将异常使用throws 方法抛出处理,而不是使用try··catch 机制来处理,如果使用try··catch 机制处理,那么自定义的异常相当于没有发挥作用,即不会产生异常。
代码实现:
//当调用该方法时传入的参数是大于0的话,就会出现异常,输出"出现错误啦!"
public static void DefEcept(int i) throws Exception{
if(0<i){
throw new Exception("出现错误啦!");
//注意:在自定义的异常机制时使用关键字throw抛出异常,但是不能在本方法内使用try··catch方法来处理该异常,否则相当于本身产生的异常没有被抛出
} //所以只能将本身产生的异常向上抛出:throws Exception
}

关键字throw和throws的区别
throw :在自定义的异常中用于抛出异常对象的关键字,不会在定义的本事对异常进行处理;
throws :用于处理异常的方法中的一种,将遇到的异常进行抛出处理,抛给调用该方法时进行处理,与throw 的意义差别很大。

几种异常产生及处理代码实现如下:
public static void main(String[] args) {

//非强制性异常
String[] str=new String[]{"1","2","3"};
System.out.println(str[3]);

FEcept(str);//调用数组访问方法

//强制性异常

try {//使用该机制的好处:在层次结构化编程中分层处理不同层次出现的异常,明确什么时候处理异常;另外,在出现异常时 可以自定义输出,使异常界面更加友好
QEcept();
} catch (IOException e) {
// TODO Auto-generated catch block
//e.printStackTrace();//系统内部默认的输出异常的信息
System.out.println("出现异常!请检查代码");//自己设置输出信息
}//调用这个方法要处理该方法的异常:1、使用try···catch机制;2、继续向上一级抛出异常,直至main方法--最终接收者,最后会将异常处理交给虚拟机处理


//自定义异常
try {
DefEcept(3);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//测试数组越界的异常:非强制性异常,在编译过程中不处理,最后在执行时报异常
public static void FEcept(String[] str){//静态方法,可直接通过方法名调用
System.out.println(str[3]);//无第下标为3的元素,报错,数组越界
}

//测试文件异常:强制性异常,在编译过程中报异常,必须处理异常程序才能执行
public static void QEcept() throws IOException{//将该方法产生的的异常往外抛出,谁调用这个方法就处理这个异常,也可以在本方法内使用try···catch机制处理异常
File file = new File("123");
file.createNewFile();//创建新文件时可能出错:所给的文件路径不存在等错误,会报异常
}

//测试一个自定义异常类型
public static void DefEcept(int i) throws Exception{
if(0<i){
throw new Exception("出现错误啦!");
//注意:在自定义的异常机制时使用关键字throw抛出异常,但是不能在本方法内使用try··catch方法来处理该异常,否则相当于本身产生的异常没有被抛出
} //所以只能将本身产生的异常向上抛出:throws Exception
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值