• 2015年11月26日 Java基础系列(五)异常Exception


    ,异常都是标准类Throwable的一些子类的对象。

    Throwable类的几个方法

    1 getMessage()

    返回描述该异常的信息

    2 printStackTrace()

    把消息和栈的跟踪记录记录输出到控制台

    3 printStackTrace(PrintStream s)

    把消息和栈的跟踪记录记录输出到流中

    4 fillInStackTrace()

    将栈的跟踪记录更新为调用此方法时的状态,这个方法的主要作用是读者希望再次抛出一个异常(以便于它被调用的方法捕获),并且记录这个再次抛出异常的点。

    e.fillInStackTrace();
    throw e;

    java.lang.Error

    Error时不用捕获,捕获了也不能处理。

    java.lang.Exception

    必须捕获,否则编译不通过。

    1 RuntimeException是Exception的子类

    2 throws

    3 try catch finally

    4 throw

    java.lang.RuntimeException

    下面列举一下常见的RuntimeException:

    1、NullPointerException:见的最多了,其实很简单,一般都是在null对象上调用方法了。
          String s=null;
          boolean eq=s.equals(""); // NullPointerException
       这里你看的非常明白了,为什么一到程序中就晕呢?
       public int getNumber(String str){
      if(str.equals("A")) return 1;
       else if(str.equals("B")) return 2;
       }
       这个方法就有可能抛出NullPointerException,我建议你主动抛出异常,因为代码一多,你可能又晕了。
       public int getNumber(String str){
      if(str==null) throw new NullPointerException("参数不能为空");
                                       //你是否觉得明白多了
      if(str.equals("A")) return 1;
          else if(str.equals("B")) return 2;
       }

    2、NumberFormatException:继承IllegalArgumentException,字符串转换为数字时出现。比如int i= Integer.parseInt("ab3");

    3、ArrayIndexOutOfBoundsException:数组越界。比如 int[] a=new int[3]; int b=a[3];

    4、StringIndexOutOfBoundsException:字符串越界。比如 String s="hello"; char c=s.chatAt(6);

    5、ClassCastException:类型转换错误。比如 Object obj=new Object(); String s=(String)obj;

    6、UnsupportedOperationException:该操作不被支持。如果我们希望不支持这个方法,可以抛出这个异常。既然不支持还要这个干吗?有可能子类中不想支持父类中有的方法,可以直接抛出这个异常。

    7、ArithmeticException:算术错误,典型的就是0作为除数的时候。

    8、IllegalArgumentException:非法参数,在把字符串转换成数字的时候经常出现的一个异常,我们可以在自己的程序中好好利用这个异常。

    三、定义自己的异常类

    最好从Exception类继承,这样做编译器可以跟踪到程序中的异常会在何处抛出,并且检查它们是被捕获还是在一个方法中声明会抛出该异常。

    由于继承自Throwable,因此编译器会将栈的跟踪信息自动传进去。

    /**
     * 定义异常类,包含默认构造函数和传参构造函数
     * @author Administrator
     *
     */
    public class DreadfulProblemException extends Exception {
    
        public DreadfulProblemException() {
        }
    
        public DreadfulProblemException(String paramString) {
        }
    
    }
    
    //catch中抛出自己的异常类
    DreadfulProblemException e = new DreadfulProblemException();
    throw e;

     Exception 与 RuntimeException的区别

    1、Exception必须try{ } catch(){ }捕获,RuntimeException可以不捕获 ,不捕获时由JVM来处理,但是会引起进程中断,也可以捕获。

    2、异常不捕获情况下,RuntimeException可以编译通过,Exception无法编译通过。

  • 相关阅读:
    [软件工程 2018西北师范大学]实验一 软件工程准备 评分
    【集美大学1411_助教博客】助教总结
    【集美大学1411_助教博客】团队作业10——项目复审与事后分析(Beta版本)
    【集美大学1411_助教博客】团队作业9——测试与发布(Beta版本)
    【集美大学1411_助教博客】团队作业8——第二次项目冲刺(Beta阶段)
    【集美大学1411_助教博客】alpha阶段后 成绩
    Javascript 异步加载详解
    复选框,全选或者全不选
    Java六大必须理解的问题
    写了一个Java的简单缓存模型
  • 原文地址:https://www.cnblogs.com/yaochc/p/4996446.html
Copyright © 2020-2023  润新知