【安博培训技术】Java4 异常处理 20130919

来源:互联网 发布:伊朗女孩 知乎 编辑:程序博客网 时间:2024/06/06 01:24
异常处理,调试


异常分为:
1. 检查异常
必须人为干预,否则编译不通过?
    检查异常都是继承自  Exception类
2. 运行时异常
     不是非得人为干预
     都是继承自 RuntimeException类


Java异常类 


处理异常的方式:
    1.try catch finally
        注意: try 必须出现catch和finally可以
  都出现 可以出现一个 但不能都不出现
             catch可以出现多个
     2.throws


try 和 catch 块 2-2
  public class ArithmeticException {
    /** 构造方法. */
    public ArithmeticException() {
    }
    public static void main(String[] args) {
      ExceptionRaised obj = new ExceptionRaised();
      try {
          /* 定义变量 result 以存储结果. */
          int result = obj.calculate(9, 0);
          System.out.println(result);
       }catch (Exception e) {
          System.err.println(“发生异常:"  + e.toString());
          e.printStackTrace();
      }
    }
  }
  
  class ExceptionRaised {
       /** 构造方法. */
       public ExceptionRaised()  {
       }
      /**
       * 这个方法运行时将会产生一个异常.
       * @param operand1 除法中的分子
       * @param operand2 除法中的分母
       * @return int   返回除法的结果
       */
       public int calculate(int operand1, int operand2)  {
          int result = operand1 / operand2; 
          return result;
      }
  }


异常处理块的一般形式
  try{
   // 要监控错误的代码块
      methodGeneratingException();
  } catch (Exception e) {
  // Exception e 的异常处理程序
  } finally{
  // 在 try 结束前要执行的代码块
     cleanup();
  }
  
多重 catch 块3-1
  一段代码可能会生成多个异常
  当引发异常时,会按顺序来查看每个 catch 语句,并执行第一个类型与异常类型匹配的语句
  执行其中的一条 catch 语句之后,其他的 catch 语句将被忽略 
         
  try{
    …….
  } catch(ArrayIndexOutOfBoundsException e) {
    ……
  } catch(Exception e) {
    ……
  }


多重 catch 块3-2
  使用多重 catch 语句时,异常子类一定要位于异常父类之前 
 
用户自定义异常 2-1
  自定义异常概念
  使用自定义异常的时候
  JavaAPI提供的内置异常不一定总能捕获程序中发生的所有错误。有时会需要创建用户自定义异常 
  自定义异常需要继承Exception 及其子类


用户自定义异常 2-2
  创建用户自定义异常
  继承 Exception 或其子类
  
  class ArraySizeException extends NegativeArraySizeException  {
       /** 构造方法。 */
       ArraySizeException()  {
           super(“您传递的数组大小非法");
      }
  }
  
    class UserDefinedExceptions {
      /** 构造方法. */
      protected UserDefinedExceptions() {
      }
     /**
      * 类和应用程序的唯一入口点.
      * @param arg 字符串参数的数组
      */
      public static void main(String[] arg) {
          ExceptionClass obj = new ExceptionClass(Integer.parseInt(arg[0]));
      }
  }
  
    class ExceptionClass {
       ExceptionClass(int val) {
          size = val;
          try {
              checkSize();
          } catch (ArraySizeException e) {
              System.out.println(e);
          }
      }
     /** 声明变量以存储数组的大小和元素. */
      private int size;
      private int[] array;
      /** 检查数组长度的方法.
        *  @ throws 一个 ArraySizeException
        */
      public void checkSize() throws ArraySizeException {
          if (size < 0) {
              throw new ArraySizeException();
          }
          array = new int[3];
          for (int count = 0; count < 3; count++) {
          array[count] = count + 1;
          }
      }
  }


Myeclipse断点调试
  在你觉得有错的地方设置断点 。
  切换到DEBUG模式下。
      
  运行程序,当程序运行到刚才设置断点的位置就会停下来,并且那行代码底色会高亮显示。、
       
  接着你在如下界面你可以看到你想要的信息 


在Variables里面可以查看所有变量的值,比如刚才设置的断点里面的strClassName的值就可以看到。 


  下面按钮第一个是进入方法执行,比如你调用了其他方法,可以进入方法一步一步执行,如果点击第二个按钮,只会在本方法内一步一步执行,第三个按钮时你跳出此方法,继续执行调用这个方法的原方法。 
  
总结
  异常是运行时发生的错误
  可以使用 try、catch、throw、throws 和 finally 来管理 Java 异常处理。要监控的程序语句包含在 try 块内catch 块中的代码用于捕获和处理异常。在方法返回之前绝对必须执行的代码应放置在 finally 块中
  要手动引发异常,使用关键字 throw。任何被抛到方法外部的异常都必须用 throws 子句指定
  自定义异常的编写和使用
  异常的调试