1.基本介绍448
异常处理是当异常发生时,异常处理的方法。
2.异常处理方法1)try-catch-finally
程序员在代码中捕获异常并自行处理
2)throws
将异常抛出,交给调用人(方法)处理,顶级处理人员是JVM
2.1示意图448 3.try-异常处理catch1)Java提供try和catch块来处理异常。try块用于包含可能出错的代码。catch块用于处理try块中的异常。程序中可以根据需要多try.catch块.
3.1try-catch处理异常-注意事项014491)如发生异常,则不执行异常发生后的代码,直接进入catch块
2)如未发生异常,则按顺序执行try代码块,不会进入catch.
3)如果您想执行某个代码(如关闭连接、释放资源等。),无论是否有异常,请使用以下代码finaly{}
com中的代码.stulzl.trycatch_exception_detail.TryCatchDetail包
package com.stulzl.trycatch_exception_detail;//try-catch 异常处理方法-注意事项 449public class TryCatchDetail { public static void main(String[] args) { //快捷键ctrl+alt+t try { //String str = "中国"; String str = "123"; //解读 //1. 若发生异常,如果发生异常,后面的代码不会执行,直接进入 catch 块 //2. 如未发生异常,则按顺序执行 try 不进入代码块的代码块 catch //3. 无论是否有异常,都要执行一段代码(例如关闭连接,释放资源等。)使用以下代码- finally int a = Integer.parseInt(str); System.out.println数字:“数字:”+a); } catch (NumberFormatException e) { System.out.println(“异常信息=”+e.getMessage()); }finally{ System.out.println(finally代码块被执行…); } System.out.println(继续进行程序…); }}
3.2try-catch处理异常-注意事项02449
4)可以有多个catch语句,捕获不同的异常(不同的业务处理),要求父异常在后面,子异常在前面,比如(Exception在后面,Nulpointerexception在前面)。如果出现异常,只会匹配一个catch。
com中的代码.stulzl.trycatch_exception_detail02.包中TryCatchDetail02
package com.stulzl.trycatch_exception_detail02;//try-catch 异常处理方法-注意事项第四点 449//4)可以有多个catch语句,捕获不同的异常(不同的业务处理),要求父异常在后面,// 前面的子类异常,比如(Exception 在后,NullPointerException 前),////// 若发生异常,catchpublic只能匹配 class TryCatchDetail0 { public static void main(String[] args) { //解读 //1.如果 try 代码块可能有多个异常 //2.可以使用多个 catch 分别捕获不同的异常,相应处理 //3.要求子类异常写在前面,父类异常写在后面 try { Person person = new Person(); person = null; System.out.println(person.getName());//NullPointerException int n1 = 10; int n2 = 0; int res = n1 / n2;//ArithmeticException } catch (NullPointerException e) { System.out.println(“空指针异常=” + e.getMessage()); } catch (ArithmeticException e) { System.out.println(“算术异常=” + e.getMessage()); } catch (Exception e) {//父类异常,要写在后面 System.out.println(e.getMessage()); } finally { } }}class Person{ private String name; public String getName(){ return name; }}
5)try-finally可以一起使用,相当于没有捕获异常,所以程序会直接崩溃/退出。应用场景是执行代码,无论是否异常,都必须执行业务逻辑
com中的代码.stulzl.trycatch_exception_detail03.包中TryCatchDetail03
package com.stulzl.trycatch_exception_detail03;//try-catch 异常处理方法-注意事项第五点 449public class TryCatchDetail03 { public static void main(String[] args) { //5)try-finally可以一起使用,这种用法相当于没有捕获异常,所以程序会直接崩溃/退出。 try{ int n1 = 10; int n2 = 0; System.out.println(n1/n2); }finally{ System.out.println(执行finaly..); } System.out.println(继续执行代码…);//程序直接在这里崩溃,因此不输出 }}
4.try-catch练习4.1练习1判断输出450代码.stulzl.trycatch_exception_exercise01.包中Trycatchercise01
package com.stulzl.trycatch_exception_exercise01;//try-catch练习 练习1 判断输出 450public class Trycatchercise01 {}class Exception010 {//类 public static int method() { try { String[] names = new String[3];//String[]数组,数组元素为空 if (names[1].equals("tom")) {//本句报Nullpointerexception异常,不执行后续代码 System.out.println(names[1]); } else { names[3] = "hspedu"; } return 1; } catch (ArrayIndexOutOfBoundsException e) { return 2; } catch (NullPointerException e) {//捕获异常 return 3; } finally { //必须执行 return 4; //返回4,覆盖之前返回的3 } } public static void main(String[] args) { System.out.println(method()); //输出4 }}
4.2练习2判断输出450代码的com.stulzl.trycatch_exception_exercise02.包中Trycatchercise02
package com.stulzl.trycatch_exception_exercise02;//try-catch练习 练习1 判断输出 450public class Trycatchercise02 {}class Exception02 { public static int method() { int i = 1; try { i++; //i = 2 String[] names = new String[3]; if (names[1].equals("tom")) {//空指针,抛出异常 System.out.println(names[1]); } else { names[3] = "hspedu"; } return 1; } catch (ArrayIndexOutOfBoundsException e) { return 2; } catch (NullPointerException e) {//捕获异常 return ++i; //i = 3 } finally {//必须执行 return ++i; //i = 4 } } public static void main(String[] args) { System.out.println(method());//4 }}
4.3练习3判断输出450代码的com.stulzl.trycatch_exception_exercise03.包中Trycatchercise03
package com.stulzl.trycatch_exception_exercise03;public class Trycatchercise03 {}class Exceptionexe01 { public static int method() { int i = 1;//i = 1 try { i++;// i=2 String[] names = new String[3]; if (names[1].equals("tom")) { //空指针 System.out.println(names[1]); } else { names[3] = "hspedu"; } return 1; } catch (ArrayIndexOutOfBoundsException e) { return 2; } catch (NullPointerException e) { // i = 3 => 保存临时变量 temp = 3;必须执行finally语句,因此,代码不会直接return ///等待finally执行完成,继续return return ++i; } finally {/finally语句必须执行 ++i; //i = 4 System.out.println("i=" + i);// i = 4 } } public static void main(String[] args) { System.out.println(method());// 3 }}
5.try-catch异常处理小结450
1)如果没有异常,则执行try块中的所有句子,而不执行catch块中的句子。如果有finally,最终需要执行finally中的句子
2)如果有异常,try块中的异常发生后,try块中剩余的句子将不再执行。如果有finally,将执行catch块中的句子,并最终执行finally中的句子!