标签:
package cn.seven.shengsiyuan.exception; public class MyException extends Exception{//非运行时异常,因为只是继承了Exception并非RuntimeException public MyException() { // TODO Auto-generated constructor stub } public MyException(String message){ super(message);//查看源代码发现不停调用父类的super()方法,直到Throwable } }
package cn.seven.shengsiyuan.exception; public class MyExceptionTest { public void method(String str) throws MyException,MyException2{ if(null==str){ throw new MyException("传入的字符串不能为null"); } else if("hehe".equals(str)){//这样写比较好,就不不会出现NullPointerException,因为要是str写前面可能会出现str=null的情况 throw new MyException2("传入的字符串不能为hello"); } } public static void main(String[] args) {//对非运行时的异常的处理方法1:我声明了异常,谁调用我就要处理这个异常,要是不处理就继续抛出 MyExceptionTest exceptionTest = new MyExceptionTest(); try { exceptionTest.method("hehe"); } catch (MyException e) { // TODO Auto-generated catch block System.out.println("MyException"); e.printStackTrace(); } catch (MyException2 e) { System.out.println("MyException2"); e.printStackTrace(); } } }
package cn.seven.shengsiyuan.exception; public class MyExceptionTest { public void method(String str) throws Exception { if (null == str) { throw new MyException("传入的字符串不能为null"); } else if ("hehe".equals(str)) {// 这样写比较好,就不不会出现NullPointerException,因为要是str写前面可能会出现str=null的情况 throw new MyException2("传入的字符串不能为hello"); } } public static void main(String[] args) {// 对非运行时的异常的处理方法1:我声明了异常,谁调用我就要处理这个异常,要是不处理就继续抛出 MyExceptionTest exceptionTest = new MyExceptionTest(); try { exceptionTest.method("hehe"); } // 对非运行时的异常的处理方法1:我声明了异常,谁调用我就要处理这个异常,要是不处理就继续抛出 catch (MyException e) { // Unreachable catch block for MyException. It is already handled by // the catch block for Exception // TODO Auto-generated catch block System.out.println("MyException"); e.printStackTrace(); } catch (MyException2 e) { System.out.println("MyException2"); e.printStackTrace(); } catch (Exception e) { /* * * method()若抛出的是 MyException和Myexception2的父类Exception对象, * 那么下面的异常捕获的时候就需要写catch Exception语句块了, 若是catch Exception语句块 * 写在所有的catch语句块 * 最前面,那么所有的异常都将又这个语句块进行捕获,其他的方法会出现错误:不可达的方法,也就是你写的这个方法是不可能被执行的 * Unreachable catch block for MyException2. It is already handled * by the catch block for Exception 若是catch Exception语句块 * 写在所有的catch语句块 最后面,那么只会捕获method方法抛出的对应的异常,不会执行catch Exceptio语句块 * (这里是指method分别抛出 MyException和Myexception2的父类Exception对象) */ // TODO Auto-generated catch block System.out.println("Exception"); e.printStackTrace(); }} }
public void method() throws MyException{ try{ System.out.println("hello"); } catch(Exception e){ e.printStackTrace(); System.out.println("catch"); throw new MyException();//这里就可以对java api的异常进行自己的封装,并抛出 } finally{ System.out.println("finally"); } }
Think in Java 笔记_Chapter12_1_Exception基础_异常处理3_自定义异常以及抛出多个异常的处理
标签:
原文地址:http://www.cnblogs.com/together-sharing-for-freshman/p/4394308.html