对异常的理解

 异常是指程序运行期出现的错;
运行期是指敲java命令的时候;
编译期出现的错误都是语法的错误,这些错误很好解决;
java程序的执行过程中如果出现异常事件,可以生成一个异常类

对象,该异常对象封装了异常事件的信息,并将运行异常对象提

交给java运行时系统,这个过程称为抛出(throw)异常、

系统自动生成异常对象;在catch()括号内传替的是异常对象;

###
在catch(){}中经常写的处理异常的办法;1,

/ae.printStackTrace();//就是打印错误的堆栈信息;
错误的堆栈信息是指:这个错误有可能是由上一个错误引起,而

这个方法就是要将所有的错误信息都打印出来;给程序员调试的

信息,这个信息对程序的调试有很大的作用;
2,其实,java运行时系统,默认的情况就是将堆栈的错误信息给

打印了出来;



try{
    System.out.println(2/0);
}
catch (ArithmeticException ae) {
    ae.printStackTrace();
}

}

3,ae.getMessage();
如果异常方法的声明是这样的:
void m(int i) throws ArithmeticException {
        if(i == 0) throw new ArithmeticException

("这是错误的用法!");
    }
那么,ae.getMessage();的运行结果将是 “这是错误的用法!”
就是只打印出了 ae.printStackTrace();输出的信息的一小部分

信息;



第一个异常对象;
class ArrayIndexOutOfBoundsException{}属于

RuntimeException
数组下标越界;

class ArithmeticException {}属于RuntimeException
算术异常;


NullPointerExcepion  空指针异常;

throws 关键字用于声明该方法可能抛出异常;
throw  构造并抛出异常对象;


异常的分类:
Throwable  
Error (jvm出错了,系统出错了)          Exception
                    RuntimeException    


###
1,Error 是不可catch的,它是系统错误;
2,RuntimeException 这种错误可以catch,也可以不去catch
3,如果错误属于Exception而且又不是RuntimeException你就必

须去catch;
凡是在jdk中的方法后面紧挨着写了 “throws”的这些Exception

就必须得去 try catch;;
或者是其他程序员在写方法是也写了 throws 即声明该方法有可

能抛出异常;你也必须去 try catch;

### 区别必须try catch的异常和RuntimeException(可以不try

catch的区别?)
对于这些必须进行捕捉的异常如果你没有去捕捉,那么系统会在

程序“编译”时而不是运行时,就会进行报错,编译都不能通过

,因此这类异常必须进行catch;一般编译时会有这样的提示:未

报告的异常:,必须对其进行捕捉或者声明,以便抛出;
必须try catch的Exception如果不去try catch, 那么它连编译

都通不过;
但是RuntimeException可以不去try catch 因为它可以通过编译

,只是在运行时才会报出Exception;



###一个try可以跟着多个catch;try去做事,出了事catch替你抖

着;

###
finally语句的作用;
通常在finally语句中可以进行资源的清除的工作;如
1,关闭打开的文件;
2,删除临时的文件;
....


###一种非常危险的变成习惯;;
try {
f();
}
catch(IOException e){}
catch(FileNotFoundException e){}
注意这里;在catch里的大括号里没有做任何的处理,这就相当与

你将错误给隐藏了;这样做非常危险;
只要你catch了Exception就一定要做出处理常用的处理有以下两

种;
1,System.out.println(e.getMessage());
2. e.printStackTrace();
总结;你能够处理的Exception就要去try catch ;
如果处理不了的就一定要throws  Exception;
千万不要把Exception给吞了;让他隐藏了;

在main方法中如果还要抛出异常,那么这个异常就被抛给java的

运行时系统了,运行时系统默认的做法是将错误的堆栈信息给打

印出来;;运行时系统是exception的终结者;最高法院;




###,在main方法里抛出异常是一个非常不好的编程习惯;
而是应该在main方法里写try catch ;



###有时,当你在调试程序时,会出现很多的Exception,但是这

么多的Exception有可能就是一个Exception,那是因为,m1
调用m2,m2调m3,m3调用m4,main调用了m1,就会出现很多的

Exception,很有可能是:只有m4()这一个方法有异常;而产生

了很多的异常;
只要处理了m4 的异常,所有的异常就都会解决了;

###在catch Exception时,先逮子类异常,然后再逮父类异常;

如果先逮父类异常,就会出错;因为你将所有的异常都逮着了,

,,



###继承与异常的关系;
当父类中的一个有异常的方法被子类重写了,那么这个方法只要

两种方式:第一:不抛异常;第二;抛出和父类一样的异常;其

他的任何的方法都是不合法的;抛多了少了大了小了都不行;



###使用自定义的异常;通过继承生成自定义的异常类;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值