JAVA API 异常处理

来源:互联网 发布:ifconfig修改mac地址 编辑:程序博客网 时间:2024/04/30 09:36
示例一:/** * java中的异常处理机制 * @author Administrator * */public class ExceptionDemo1 {public static void main(String[] args) {System.out.println("程序开始了");try{String str = null;/* * JVM在执行str.length()方法时发现str为null. * 于是创建一个NullPointerException的实例,并 * 将出错的描述信息封装进去,然后将异常抛出来。 * 这时JVM会查看下面这句代码有没有被一个try语句 * 包围,若没有,说明当前方法没有捕获这个异常的能 * 力,那么会将该异常抛出到方法外面,由于抛出到了 * main方法外面。JVM会将当前程序终止。 * 若有try包围,就会将该空指针异常实例传递给catch * 中的NullpointerException e,然后执行该catch的 * 内容用来解决异常。当解决后,程序得以正常继续的 * 执行。 */System.out.println("length:"+str.length());}catch(NullPointerException e){System.out.println("出现了一个空指针!");}System.out.println("程序结束了");}}
/** *  多个catch * @author Administrator * */public class ExceptionDemo2 {public static void main(String[] args) {System.out.println("程序开始了");try{String str = "aa";System.out.println("length:"+str.length());System.out.println(str.charAt(0));System.out.println(Integer.parseInt(str));}catch(NullPointerException e){System.out.println("出现了一个空指针");}catch(StringIndexOutOfBoundsException e){System.out.println("下标越界了");/* * 要有一个好习惯,在最后一个catch中去捕获最大的 * 异常。这样可以避免由于try中出现了一个没有捕获的 * 异常而导致程序中断 *  * 在定义多个catch时要注意,若有父子类关系的异常 * 同时出现,那么父类异常要定义在子类异常的下面。 *  */}catch(Exception e){System.out.println("反正就是出了个错!");}System.out.println("程序结束了");}}

/** * finally块 * finally可以直接跟在try语句块后面 * 或者最后一个catch之后 * finally块中的代码保证我们的程序无论出错与否,否会被 * 执行。 *  * @author Administrator * */public class ExceptionDemo3 {public static void main(String[] args) {System.out.println("程序开始了");try {String str = "";System.out.println(str.length());System.out.println("!!!!");} catch (Exception e) {System.out.println("出错了!");} finally{System.out.println("finally的代码一定执行!");}System.out.println("程序结束了");}}

/** * finally面试题 * 1:final finally finalize分别是什么? *   finalize是Object中定义的一个方法。该方法被jvm执行 *   当一个对象即将被GC回收前,会调用该方法。 *  * 2:下面的例子 *  * @author Administrator * */public class ExceptionDemo4 {public static void main(String[] args) {System.out.println(test("0")+","+test(null)+","+test(""));}public static int test(String str){try {return str.charAt(0)-'0';} catch (NullPointerException e) {return 1;} catch (Exception e){return 2;} finally{return 3;}}}

/** * throw的作用是主动抛出异常 * 通常两种情况会抛出异常: * 1:满足语法要求,但是不满足业务逻辑 * 2:出现异常的代码不应当负责处理该异常时(责任问题) *  * @author Administrator * */public class ExceptionDemo5 {public static void main(String[] args){Person person = new Person();/* * 当我们调用一个声明有throws的方法时,编译器要求 * 我们必须在调用方法的这里处理该方法可能抛出的异常 * 处理手段有两种: * 1:自己try-catch捕获并处理 * 2:继续将该异常的抛出声明在当前方法上继续向外抛 *  * 永远不要再main方法上声明throws! */try {person.setAge(10);} catch (IllegalAgeException e) {e.printStackTrace();}System.out.println("年龄是:"+person.getAge());}}

示例二:

/** * Exception中定义了一些常用方法 * @author Administrator * */public class ExceptionAPIDemo1 {public static void main(String[] args) {System.out.println("程序开始了");try {String str = "aa";System.out.println(Integer.parseInt(str));} catch (Exception e) {//输出错误堆栈(程序执行过程,一直到出错的位置)e.printStackTrace();//String getMessage() 获取错误的信息System.out.println(e.getMessage());}System.out.println("程序结束了");}}

/** * Exception的API 2 * @author Administrator * */public class ExceptionAPIDemo2 {public static void main(String[] args) {try {dosome("");} catch (Exception e) {//e.printStackTrace();System.out.println(e.getCause());}}public static void dosome(String str)throws Exception{try {System.out.println(str.charAt(0));} catch (NullPointerException e) {throw new Exception(e);} catch(StringIndexOutOfBoundsException e){throw new Exception(e);}}}
示例三:
/** * 自定义异常 * 该异常表示一个年龄不合法的错误 * 通常我们在表示当前程序出现的一些业务逻辑错误时,可以 * 用自定义异常来描述。 *  * @author Administrator * */public class IllegalAgeException extends Exception{private static final long serialVersionUID = 1L;public IllegalAgeException() {super();// TODO Auto-generated constructor stub}public IllegalAgeException(String message, Throwable cause) {super(message, cause);// TODO Auto-generated constructor stub}public IllegalAgeException(String message) {super(message);// TODO Auto-generated constructor stub}public IllegalAgeException(Throwable cause) {super(cause);// TODO Auto-generated constructor stub}}


0 0