A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ringfingers 中级黑马   /  2015-10-14 21:20  /  433 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

###Throwable
        Error       
                服务器宕机
        Exception
                RuntimeException        ——运行期异常---交给JVM打印,其他一场都是编译时异常
                非RuntimeException        ——编译时异常(未雨绸缪),比如找不到文件,这样的异常就要在编译的时候处理,否则无法编译通过

        ——运行时异常:程序员所犯的异常,回来修改一下就好

##Exception

#Exception
        #——try catch异常三种格式                               
                1、try catch
                2、try catch finally
                        #finally语句
                        finally语句一定会执行
                        (如果在执行finally语句时候虚拟机关闭,System.exit(0),那么finally不会执行)
                        return语句相当于方法的最后一口气,死前会看看有没有finally,有的话执行finally
                        finally语句用来释放资源(io,server)
                3、try finally
finally和return执行顺序               
return先建立返回路径,再看看finally有没有存在,执行finally——————**return先执行,然后再finally**
**!!千万不要再finally里面写返回语句return,因为finally会强制覆盖try和catch中所有的返回语句**

**面试题**: public int method() {
        XXXX
        cathch (Exception e ) {
                i = 30;       
                return i;                                        已经在catch中建立了返回通道,将i返回,所以即使在finally中赋值了i,没有用
        }finally {
                i = 40;                                               
        }
}


        #——        Try        catch  (try代码检测异常,catch捕获异常,可捕获多个异常)

                } catch (NullPointerException n) {
//                        System.out.println(n.toString());   默认调用toString方法
                        System.out.println("空指针异常");
//                        n.printStackTrace();
                } catch (Exception e) {                                 //多条catch语句,大的Exception放最后
//                        System.out.println(e.getMessage()); 获取异常信息
//                        System.out.println(e);                                打印类名和异常信息(默认调用toString())
//                        e.printStackTrace();                                打印堆内存信息
                        System.out.println("发现错误");


        ##——Throws

**<throws>**后边可以多个异常类名,而throw后边只能跟一个异常对象,定义在方法名后
**<thows>**的如果是运行时异常RuntimeException,方法上就不用throw一个exc,如果是涵盖编译期异常大Exception,方法上就必须throw一个exception

                #——thorws:
                        public static void main(String[] args) throws RuntimeException,ArithmeticException
                #——thow:
                        ①throw new RuntimeException();        //匿名的异常对象
                        ②/*有名的异常对象
                         * Exception e = new Exception();
                         * throw e ;
                         * /

### —自定义异常 ###
        class abcException extends Exception {  //自定义一个异常类
                ALT+Shift+S,有参构造函数
        }
        main throws abcException{                                //如果自定义的异常继承的是RUntimeException,那么方法上b不需要throws =W=
        throw new abcException("年龄非法");                //new 一个自定异常对象
}


### 子类异常规则: ###

A:异常注意事项
        * a:子类重写父类方法时,子类的方法必须抛出相同的异常或父类异常的子类。(父亲坏了,儿子不能比父亲更坏)
        * b:如果父类抛出了多个异常,子类重写父类时,只能抛出相同的异常或者是他的子集,子类不能抛出父类没有的异常
        * c:如果被重写的方法没有异常抛出,那么子类的方法绝对不可以抛出异常,如果子类方法内有异常发生,那么子类只能try,不能throws

原则:如果try无法解决,交给throws,由调用者处理
try catch:后续代码还需要执行                                try catch异常时为运行时异常准备的               
throw:后续代码不需要继续执行,就抛出                抛出异常是为编译期异常准备的

3 个回复

倒序浏览
自顶=、=
回复 使用道具 举报
给妹子顶一个
回复 使用道具 举报
dzzheng3 来自手机 中级黑马 2015-10-14 21:38:12
板凳
这个必须标记一下
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马