黑马程序员技术交流社区

标题: 异常的个人总结1 [打印本页]

作者: 歸羽    时间: 2014-7-16 10:16
标题: 异常的个人总结1
Throwable
Throwable及其所有的子类都具有可抛型,
Error
通常出现重大问题如:运行的类不存在或者内存溢出等。不编写针对代码对其处理
Exception
在运行时运行出现的一起情况,可以通过try catch finally
Exception和Error的子类名都是以父类名作为后缀。
Throwable方法
getMessage();获取异常信息,返回字符串。
toString();获取异常类名和异常信息,返回字符串。
printStackTrace();获取异常类名和异常信息,以及异常出现在程序中的位置。返回值void。
printStackTrace(PrintStream s);通常用该方法将异常内容保存在日志文件中,以便查阅。

异常的分类:
1编译时被检测异常:只要是Exception和其子类都是,除了特殊子类RuntimeException体系。
这种问题一旦出现,希望在编译时就进行检测。让这种问题有对应的处理方式。这样的问题都可以针对性处理。
2编译时不检测异常(运行时异常)就是Exception中的RuntimeException和其子类。这种问题的发生,无法让功能继续,运算无法进行,更多是因为调用者的原因导致的而或者引发了内部状态的改变导致的。
那么这种问题一般不难处理,直接编译通过,在运行时,让调用者调用时的程序强制停止,让调用者对代码进行修正。
所以自定义异常时,要么继承Exception,要么继承RuntimeExcption

Runtime和Exception的区别
1throw使用在函数上。throws使用在函数内。
2throws抛出的是异常类,可以抛出多个,用逗号隔开
throw抛出的是异常对象

异常处理的捕捉形式,处理原则
异常处理的捕捉形式;
这是可以对异常进行针对性处理的方式。
具体格式是try{}catch(异常类 变量,该变量用于接收发生的异常对象){处理异常的该骂}
finally{一定会被执行的代码}。
异常的处理原则
1函数内容如果抛出需要检测的异常,那么函数上必须声明
否则必须在函数内用trycatch捕捉,否则编译失败。
2如果调用到了声明异常的函数,要么trycatch要么throw,否则编译失败。
3什么时候catch,什么时候throws呢?功能内容可以解决,用catch。解决不了的,用throws告诉调用者,由调用者解决。
4一个功能如果抛出了多个异常,那么调用时,必须有对应多个catch进行针对性的处理
内部又几个需要检测的异常,就抛出几个异常,抛出几个,就catch几个。


class ExceptionDemo1
{
        public static void main(String[] args){
                int[] arr=new int[3];
                Demo1=new ExceptionDemo();
                try{
                        int num=d.method(null,-1);
                        System.out.println("num="+num);
                }catch (NullPointerException e){
                        System.out.println(e.getMessage());
                        System.out.println(e.toString());
                        e.printlnStackTrace();
                        //jvm默认的异常处理机制就是调用异常对象的这个方法。
                        System.out.exit();
                        //退出JVM
                }finally{
                        System.out.println("finally");
                        //通过用于关闭(释放)资源。
                }
                catch (Exception e){
                        //多个catch父类catch放在最下面
                }
        }
}


作者: 裤裆里的温柔、    时间: 2014-7-16 11:40
支持一下
作者: 青偆丶易逝〃    时间: 2014-7-16 12:42
异常感觉可以很容易, 也可以很难的样子。。 哈哈
作者: 崔MQ    时间: 2014-7-16 12:42
路过,还不错
作者: 郭良    时间: 2014-7-16 12:44
不错的小总结,顶下
作者: 嗅ㄨiaǒ孑    时间: 2014-7-16 12:54
撸主辛苦了
作者: 为爱编程    时间: 2014-7-16 13:04
1.throw使用在函数上。throws使用在函数内。这句话是不是写反了,应该是throws用在函数上;throw用在函数内把?
作者: 乐此不疲    时间: 2014-7-16 13:06
感谢分享
作者: 张帅宾    时间: 2014-7-16 13:31
很不错,又学的了
作者: DarkSky    时间: 2014-7-16 20:40
前来学习!!
作者: 汉谟拉比    时间: 2014-7-16 21:01
支持一下,写的比较细,,,
作者: So丶執念    时间: 2014-7-16 22:30
不明觉厉~~~还没学到这来
作者: tianleboy    时间: 2014-7-16 22:51
throws 是用于函数上~~  throw 是用在函数内~~  楼主搞错了~
作者: 毕业生    时间: 2014-7-16 22:54
很不错的总结,
作者: 歸羽    时间: 2014-7-17 23:44
哦。可能打字快了,粗心了,看到大家的留言感觉人生又有新的希望了。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2