package com.hspedu.exception_;
public class Course449 {
public static void main(String[] args) {
// try-catch-finally处理细节
/*
* try-catch和throws处理机制:
* 1、try-catch-finally处理机制
* try {
* 可能有异常的代码
* } catch(Exception e) {
* 捕获到异常
* 1.异常发生时,系统将异常封装成Exception对象e
* 2.将异常对象e传递给catch块
* 3.得到异常对象进行处理
* 如果没有异常catch代码块不会执行
* } finally {
* 不管try是否有异常发生,finally一定会执行
* 通常将释放资源的处理放在finally
* }
*
* 没有finally代码块也是可以的
* */
/*
* 2、throws处理机制
* 例如jvm调用main,main方法调用f1方法,f1方法调用f2方法
* 当f2发生异常时,f2如果throws抛出异常,则将异常交给f1方法处理
* f1方法可以选择try-catch处理、也可以throws抛出异常
* 如果f1抛出则交给main方法处理异常,如果再抛出则由jvm处理
* jvm处理异常:1、输出异常信息,2、中断程序
*
* try-catch-finally和throws二者选一处理异常
* 如果没有显示使用try-catch和throws,则默认使用throws抛出异常
*
* */
/*
* 1、如果发生异常,则异常后的代码不再执行,直接进入catch
* 2、如果没有发生异常,则顺序执行try代码块,不会执行catch
* 3、不管是否有发生异常,都会执行finally
* */
try {
String str = "韩顺平教育";
int a = Integer.parseInt(str);
System.out.println("a = " + a);
} catch (NumberFormatException e) {
System.out.println("异常信息:" + e.getMessage());
} finally {
System.out.println("finally");
}
System.out.println("=================");
try {
String str = "123";
int a = Integer.parseInt(str);
System.out.println("a = " + a);
} catch (NumberFormatException e) {
e.printStackTrace();
} finally {
System.out.println("finally");
}
System.out.println("=================");
/*
* 4、如果代码块可能有多个异常,可以使用多个catch分别捕获不同的异常
* 做出相应的处理,子类的异常写在前面,父类的异常写在后面,最多只会执行一个catch
* */
try {
Person person = new Person();
person = null;
System.out.println(person.getName()); // 空指针
int n1 = 10;
int n2 = 0;
int res = n1 / n2; // math
} 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 {
System.out.println("finally");
}
System.out.println("=================");
/*
* 5、try-finally,没有捕获异常,执行完finally会退出程序,不会再执行后面的代码
* 应用场景是执行一段代码,必须执行某个业务逻辑
* */
try {
int n1 = 10;
int n2 = 0;
// int n2 = 2;
System.out.println(n1 / n2);
} finally {
System.out.println("finally");
}
System.out.println("程序继续...");
}
}
class Person {
private String name = "jack";
public String getName() {
return name;
}
}
package com.hspedu.exception_;
public class Course450 {
public static void main(String[] args) {
System.out.println(method());
}
public static int method() {
try {
String[] names = new String[3];
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;
}
}
}
package com.hspedu.exception_;
public class Course450_2 {
public static void main(String[] args) {
System.out.println(method()); // 4
}
public static int method() {
int i = 1;
try {
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; // 3
} finally {
return ++i; // 4
}
}
}
package com.hspedu.exception_;
public class Course450_3 {
public static void main(String[] args) {
System.out.println(method()); // 3
}
public static int method() {
int i = 1;
try {
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; // 3
} finally {
++i; // 4
System.out.println("i = " + i); // 4
}
}
}