黑马程序员--异常

 ------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------

异常

 

异常:指程序运行中所出现的问题,如空指针,角标越界等。这个问题按照面向对象思想进行描述,并封装成了对象。而通过将问题进行分类,发现其中的共有问题,便形成了异常体系。

异常的体系:

Throwable

         |--Error:通常出现重大问题,如:运行的类不纯在或者内存有溢出等。不编写正对代码处理。

         |--Exception:在运行时运行问题的情况,可以通过try catch finally进行解决。

注:ExceptionError的子类名都是以父类名作为后缀。

 

Throwable中的方法:

getMessage():获取异常信息,返回字符串。

toString():获取异常类名和异常信息,返回字符串。

printStatckTrace():获取异常类名和异常信息,以及异常出现在程序中的位置,返回void。

printStatickTrace(PrintStream s):通常用该方法将异常内容保存在异常文件中,以便于查阅。

 

throw和throws

throw用于标识函数暴露出的异常。

throw用于抛出异常对象。

throws和throw的区别:

         throws:用于函数上,后面跟异常对象。

         throw:用于函数内,后面跟异常对象。

 

 

 

异常的处理:

 

异常处理的5个关键字

try ,catch,

finally

throw, throws

 

 

 

异常的处理格式:

         try{

         //处理异常的语句

}catch(异常类 对象){

         //处理异常的语句。

}finally{

         //一定会执行的语句。

}

Finally代码块只有一种情况不会被执行,就是在之前执行了System.exit(0).

package com.itheima;

 

public class ExceptionDemo {

    public static void main(String[] args) throws Exception {

//     throwsDemo();

       tryCatchDemo();

       tryThrowDemo();

    }

 

    private static void tryThrowDemo() {

       // TODO Auto-generatedmethod stub

       try {

           int[] arr = new int[]{1,3,5,7,9};

           System.out.println(arr[9]);

       } catch (ArrayIndexOutOfBoundsException e) {

           // TODO Auto-generatedcatch block

           //可以抛出一个新的异常。

           throw new RuntimeException();

       }

      

    }

 

    private static void tryCatchDemo() {

       // TODO Auto-generatedmethod stub

       try {

           int[] arr = new int[]{1,3,5,7,9};

           System.out.println(arr[9]);

       } catch (ArrayIndexOutOfBoundsException e) {

           // TODO Auto-generatedcatch block

           //出现异常后的处理方式,此处用打印简单演示。

           System.out.println("角标越界");

       }finally{

           System.out.println("程序执行完毕");

       }

    }

 

    private static void throwsDemo() throws Exception{

       // TODO Auto-generatedmethod stub

       //抛出给上层调用者解决

       int[] arr = new int[]{1,3,5,7,9};

       System.out.println(arr[9]);

    }

}

 

 

 

异常分类:

编译时被检查异常;       ---> Checked异常

在程序中必须使用try...catch处理;

编译时不被检测的异常;        ---> Runtime异常

可以不使用try...catch处理,但一旦出现异常就将由JVM处理。

 

Runtime异常:

RuntimeException(运行时异常)是指因设计或实现方式不当而导致的问题。多半都是程序员不小心所造成的失误,如:角标越界,空指针异常等。

 

Checked异常:

除了RuntimeException以及子类,其他的Exception及其子类都是受检查异常,我们也可以称为非RuntimeException异常。java编译器会检查他,即如出现这种异常,要么用trycatch进行处理或者用throws抛出,编译就不会通过,这种异常程序必须处理。

 

 

 

 

自定义异常:

自定义类继承Exception或其子类。

通过构造函数定义异常信息。

简单示例:

package com.itheima;

 

public class DemoException {

    public static void main(String[] args) {

       try {

           int[] arr =new int[]{1,5,7,8};

           System.out.println(arr[9]);

       } catch (Exception e) {

           // TODO Auto-generatedcatch block

           throw new Demo3("角标越界异常");

       }

    }

}

class Demo3 extends RuntimeException{

    String message;

 

    public Demo3(String message) {

       super();

       this.message = message;

    }

   

}

 

异常细节:

RuntimeException以及其子类如果在函数中被throw抛出,可以不用再函数上声明。

一个方法被覆盖时,覆盖他的方法必须抛出其相同的异常或异常子类。

 

如果父类抛出多个异常,那么重写(覆盖)方法必须抛出那些异常的一个子集,不能抛出新的异常。

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值