异常的捕获或处理

来源:互联网 发布:squid nginx 编辑:程序博客网 时间:2024/05/17 04:46
一:java异常捕获机制——>try-catch

父类异常(Exception e)——>必须放所有子类后

package day06;/** * java异常捕获机制 * try-catch * try{ * ......需要处理异常的代码片段 * }catch(XXXXException e){ * ......当try中代码出错后在这里捕获并处理 * } * @author soft01 * */public class Exception_try_catch {public static void main(String[] args) {System.out.println("程序开始了。");try {String str = "";System.out.println(str.length());System.out.println(str.charAt(0));System.out.println(Integer.parseInt(str));//try中出错代码以下的内容都不执行System.out.println("!!!!");}catch(NullPointerException e) {System.out.println("出现了空指针!");}catch(StringIndexOutOfBoundsException e) {System.out.println("字符串下标越界了。");/* * catch可以指定多个, * 当针对不同的异常有不同的处理手段时, * 可以分别去捕获它们,但是应当养成一个好习惯, * 在最后一个catch中捕获Exception, * 这样不会因为一个未捕获的异常导致程序中断。 */}catch(Exception e) {System.out.println("出现了未知错误。");}System.out.println("程序结束了。");/* * 运行结果如下: * 程序开始了。 * 0 * 字符串下标越界了。 * 程序结束了。 */}}


二:finally块的使用(中代码一定执行)——>只能定义在异常捕获机制的最后。
一般是将诸如释放资源这样的操作 放在finally中,比如流的关闭操作,删除临时文件。

1.finally块中的代码一定执行

package day06;/** * finally块 * finally块只能定义在异常捕获机制的最后。 * 即:try后面或者最后一个catch之后。 *  * finally块可以保证其中的代码一定执行, * 无论try语句块中的代码是否抛出异常。 * 所以通常会将无关乎程序出错而都要执行的代码 * 应当放在finally中确保运行。 * 一般是将诸如释放资源这样的操作 * 放在finally中,比如流的关闭操作。 * @author soft01 * */public class Exception_finally {public static void main(String[] args) {System.out.println("程序开始了!");try {String str = "";System.out.println(str.length());}catch(Exception e) {System.out.println("出现未知的错误!");}finally {System.out.println("finally块");}System.out.println("程序结束了。");/* * 程序运行结果如下: * 程序开始了! * 0 * finally块 * 程序结束了。 */}}

2.异常处理机制在IO中的应用

package day06;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;/** * 异常处理机制在IO中的应用 * @author soft01 * */public class Exception_finally_io {public static void main(String[] args) {BufferedReader br = null;try {InputStream in = System.in;InputStreamReader isr = new InputStreamReader(in);br = new BufferedReader(isr);String line = null;while(true) {line = br.readLine();if("exit".equals(line)) {break;}System.out.println(line);}}catch(IOException e) {System.out.println("出现错误!");}finally {try {if(br!=null) {System.out.println("br.close!");br.close();System.out.println("br.close");}}catch(IOException e) {e.printStackTrace();}}/* * 程序的运行结果为: * exit * br.close! * br.close! */}}


3.finally实例三:

package day06;/** * 请分别描述final finally finalize? *  * finalize是Object定义的一个方法,所以所有的类都具有该方法。 * 该方法是GC在释放一个实例的时候调用的, * 这意味着该方法调用完毕这个对象就会被释放了。 * @author soft01 * */public class Exception_finally_demo {public static void main(String[] args) {System.out.println(test("0")+","+test("")+test(null));}public static char test(String str) {try {System.out.println("test方法开始执行!");return str.charAt(0);}catch(StringIndexOutOfBoundsException e) {System.out.println("下标越界了!");return '1';}catch(Exception e) {System.out.println("空指针了!");return '2';}finally {//finally中不应当做返回结果操作//return '3';}}/* * 程序运行结果如下: * test方法开始执行! *test方法开始执行! *下标越界了! *test方法开始执行! *空指针了! *0,12 */}

三.throw用于抛出一个异常
throws用于在方法上声明该方法可能抛出某些异常(以便通知调用者处理这些异常)

1.throw用于抛出一个异常。

package day06;public class Person {private int age;public int getAge() {return age;}/** * throw用于抛出一个异常 * throws用于在方法上声明该方法可能抛出某些异常 * 以便通知调用者处理这些异常。 * @param age * @throws Exception */public void setAge(int age) throws Exception{if(age<0||age>100) {throw new Exception("年龄不合法!");}this.age = age;}}

2.自定义设置异常。

package day06;/** * 年龄不合法异常 *  * 自定义异常 * 通常自定义异常是用来声明一个业务逻辑的异常 * @author soft01 * */public class IllegalAgeException extends Exception{public IllegalAgeException(String message) {super(message);}}

3.throws用于在方法上声明该方法可能抛出某些异常。

package day06;/** * throw用于抛出一个异常 *  * @author soft01 * */public class Exception_throw_throws {public static void main(String[] args) throws IllegalAgeException{System.out.println("程序开始了");Person p = new Person();/* * 当调用一个含有throws声明异常抛出的方法时 * 编译器会检查当前代码有没有处理该异常。 * 方式有两种: * 1:使用try-catch捕获并处理该异常 * 2:在当前方法上继续使用throws声明该异常的抛出 */ try {p.setAge(10000);} catch (Exception e) {e.printStackTrace();}System.out.println(p.getAge());System.out.println("程序结束了");}}

原创粉丝点击