标签:
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