本文共 3841 字,大约阅读时间需要 12 分钟。
如果出现异常我们没有处理,jvm会帮我们进行处理,他会把异常的类型,原因还有位置显示在命令行并且还终止了程序,异常后面的代码将不在执行
package com.itheima_01;import java.io.FileWriter;import java.io.IOException;/* * 异常的处理方式: * * * jvm处理异常的方式: * 如果出现异常我们没有处理,jvm会帮我们进行处理,他会把异常的类型,原因还有位置显示在命令行 * 并且还终止了程序,异常后面的代码将不在执行 */public class ExceptionDemo2 { public static void main(String[] args) throws Exception { System.out.println(2/0); System.out.println("hello"); } }
捕获:Java中对异常有针对性的语句进行捕获,可以对出现的异常进行指定方式的处理捕获异常格式:
try {
//需要被检测的语句。
}
catch(异常类 变量) { //参数。
//异常的处理语句。
}
finally {
//一定会被执行的语句。
}
try:该代码块中编写可能产生异常的代码。
catch:用来进行某种异常的捕获,实现对捕获到的异常进行处理。
package com.itheima_01;import java.io.FileWriter;import java.io.IOException;/* * 异常的处理方式: * 捕获处理 * try...catch语句 * * try { * 有可能出现问题的代码; * } catch(ArithmeticException ae) { * 处理异常; * } * * try...catch的执行顺序: * 首先执行try语句 * 如果发现异常,异常下面的代码不在执行,直接跳入catch语句中,catch语句结束后,整个try...catch结束 * 如果没有发现异常,try语句执行结束后,try...catch直接结束, 不在执行catch语句 * * * * * jvm处理异常的方式: * 如果出现异常我们没有处理,jvm会帮我们进行处理,他会把异常的类型,原因还有位置显示在命令行 * 并且还终止了程序,异常后面的代码将不在执行 */public class ExceptionDemo2 { public static void main(String[] args) throws Exception { try { System.out.println(1); //System.out.println(2 / 0); System.out.println(2); } catch(ArithmeticException ae) { System.out.println("除数不能为0"); } System.out.println(3); }}
A:throws使用:
权限修饰符 返回值类型 方法名(形参列表) throws 异常类型1,异常类型2….{
}
package com.itheima_01;import java.io.FileWriter;import java.io.IOException;/* * 异常的处理方式: * 捕获处理 * try...catch语句 * * try { * 有可能出现问题的代码; * } catch(ArithmeticException ae) { * 处理异常; * } * * try...catch的执行顺序: * 首先执行try语句 * 如果发现异常,异常下面的代码不在执行,直接跳入catch语句中,catch语句结束后,整个try...catch结束 * 如果没有发现异常,try语句执行结束后,try...catch直接结束, 不在执行catch语句 * * * 抛出去 * 当我们不想处理异常,或者没有能力处理的时候,我们可以选择抛出异常,谁调用方法谁处理异常 * 使用关键字throws在方法的声明出抛出异常 * * * jvm处理异常的方式: * 如果出现异常我们没有处理,jvm会帮我们进行处理,他会把异常的类型,原因还有位置显示在命令行 * 并且还终止了程序,异常后面的代码将不在执行 */public class ExceptionDemo2 { public static void main(String[] args) throws Exception { //method(); function(); } public static void function() throws Exception { FileWriter fw = new FileWriter("a.txt"); } private static void method() { try { System.out.println(1); //System.out.println(2 / 0); System.out.println(2); } catch(ArithmeticException ae) { System.out.println("除数不能为0"); } System.out.println(3); }}
A:对代码进行异常检测,并对检测的异常传递给catch处理。对每种异常信息进行不同的捕获处理。
void show(){ //不用throws
try{
throw new Exception();//产生异常,直接捕获处理
}catch(XxxException e){
//处理方式
}catch(YyyException e){
//处理方式
}catch(ZzzException e){
//处理方式
}
}
注意:这种异常处理方式,要求多个catch中的异常不能相同,并且若catch中的多个异常之间有子父类异常的关系,那么子类异常要求在上面的catch处理,父类异常在下面的catch处理。
package com.itheima_01;/* * 如何处理多个异常: * 可以使用多个try...catch语句 * 使用一个try和多个catch * * 多个catch之间的顺序: * 多个catch之间可以有子父类 * 平级之间没有顺序关系 * 如果有子父类,父类异常必须放在后面 * * */public class ExceptionDemo3 { public static void main(String[] args) { try { String s = null; System.out.println(s.length()); //int[] arr = new int[5]; //System.out.println(arr[8]); //System.out.println(2 / 0); } catch(ArrayIndexOutOfBoundsException e) { System.out.println("出现数组越界了"); } catch(NullPointerException e) { System.out.println("出现空指针了"); } catch(Exception e) { System.out.println("出现异常了"); } /*try { } catch(ArrayIndexOutOfBoundsException e) { System.out.println("出现数组越界了"); }*/ } private static void method() { try { String s = null; System.out.println(s.length()); } catch(NullPointerException e) { System.out.println("出现空指针了"); } try { int[] arr = new int[5]; System.out.println(arr[8]); } catch(ArrayIndexOutOfBoundsException e) { System.out.println("出现数组越界了"); } }}
转载地址:http://knjqb.baihongyu.com/