异常Exception

来源:互联网 发布:凯立德优化内存 编辑:程序博客网 时间:2024/06/05 23:00
Throwable
包含error 和Exception
Exception又分CheckedException异常和UncheckedException,
UncheckedException就是RuntimeException,可以避免的异常
CheckedException必须捕获

error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。 
exception表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。

运行时异常比如数组脚本越界(ArrayIndexOutOfBoundsException),空指针异常(NullPointerException)、类转换异常( ClassCastException);
普通异常是运行环境的变化或异常所导致的问题,是用户能够克服的问题,例如,网络断线,硬盘空间不够,发生这样的异常后,程序不应该死掉。

  • 自己抛异常
<span style="font-family:Microsoft YaHei;font-size:14px;">public static void demo1() {             int a = 6;             int b = 0;             try { // try监控区域                   if (b == 0)                         throw new ArithmeticException(); // 通过throw语句抛出异常                  System. out.println( "a/b的值是:" + a / b);            } catch (ArithmeticException e) { // catch捕捉异常                  System. out.println( "程序出现异常,变量b不能为0。" );            }            System. out.println( "程序正常结束。" );      }</span>


  • 自动抛异常
<span style="font-family:Microsoft YaHei;font-size:14px;">public static void demo2 () {             int a = 6;             int b = 0;             try {                  System. out.println( "a/b的值是:" + a / b);            } catch (ArithmeticException e) {                  System. out.println( "程序出现异常,变量b不能为0。" );            }            System. out.println( "程序正常结束。" );      }</span>

一旦某个catch捕获到匹配的异常类型,将进入异常处理代码。一经处理结束,就意味着整个try-catch语句结束。其他的catch子句不再有匹配和捕获异常类型的机会

  • 自定义异常
<span style="font-family:Microsoft YaHei;font-size:14px;">public class MyException extends Exception {      public MyException() {             super();      }      public MyException(String msg) {             super( msg);      }}//调用public static void execute(String a) throws MyException {            System. out.println( "execute...");             if ( "true".equals(a)) {                   throw new MyException( "参数不能为 true" );            }      }      public static void main(String[] args) throws MyException {             execute("true");      }</span>

  • 抛异常 给上一层
<span style="font-family:Microsoft YaHei;font-size:14px;">public static void readFile(String file) throws FileNotFoundException {             try {                  BufferedInputStream in = new BufferedInputStream( new FileInputStream(file));            } catch (FileNotFoundException e) {                  e.printStackTrace();                  System. err.println( "不知道如何处理该异常或者根本不想处理它,但是不做处理又不合适,这是重新抛出异常交给上一级处理" );                   // 重新抛出异常                   throw e;            }      }      public static void printFile(String file) {             try {                   readFile(file);            } catch (FileNotFoundException e) {                  e.printStackTrace();            }      }      public static void main(String[] args) throws MyException {//          execute("true");             printFile("D:/file");      }</span>

  • printStackTrace()、toString()、getMessage()


0 0