zoukankan      html  css  js  c++  java
  • 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无法编译通过。

  • 相关阅读:
    target runtime apache v6.0 not defined解决
    java.lang.AbstractMethodError: javax.servlet.jsp.JspFactory.getJspApplicationContext(Ljavax/servlet/ServletContext;)Ljavax/servlet/jsp/JspApplicationContext;
    The valid characters are defined in RFC 7230 and RFC 3986问题
    invalid END header解决方法
    You have more than one version of ‘org.apache.commons.logging.Log’ visible, which is not allowed问题解决
    Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
    在eclipse中import java web项目时遇到的一些问题并将该项目通过tomcat发布
    java byte转string 涉及到字节流中有中文
    spring+mybatis框架搭建时遇到Mapped Statements collection does not contain value for...的错误
    试试看读一下Zepto源码
  • 原文地址:https://www.cnblogs.com/yaochc/p/4996446.html
Copyright © 2011-2022 走看看