**
* 1、异常处理:异常发生时,对异常的处理方式
* 2、俩种对异常的处理方式
* 1) try-catch-finally: 程序员在代码中捕获异常,自行处理
* 无论是否发生异常,finally 代码块总要执行,通常写释放资源的代码
* 2) throws:将发生的异常抛出,交给调用者处理,最顶级的调用者就是JVM
* 3、说明
* 1) t-c-f 和 throws 二选一即可
* 2) 若没有 t-c-f 异常捕获,默认throws抛出
* 3) JVM处理异常的方式:打印信息、终端程序
* 4、t-c-f语法
* try{
* // 认为会产生异常的代码
* }catch (异常){
* // 对捕获到的异常的处理
* }
* 说明:
* 1) 如果异常发生了,那么异常发生后面的代码不会执行,直接走 catch 语句块
* 2) 如果异常没有发生,则顺序执行 try 的代码块,不会进入到 catch
* 3) finally: 不管异常是否发生,都执行
* 4) 可以有多个catch语句块,捕获不同的异常。要求:父类异常在后,子类异常在前,如果发生异常,
* 只会匹配一个catch
* 5) try-finally: 这种用法相当于没有捕获异常,当异常发生时,finally执行完后,会直接崩掉
* 应用场景:执行一段代码,不管是否发生异常,都执行某段程序
* 6) t-c-f结构中,当 catch 语句块中有return语句时,会执行return的表达式,但不会马上返回,
* 会先执行finally语句块,优先返回finally语句块中的return,若finally中没有return,会返回catch中的return
1、介绍
public class ExceptionHandle {
public static void main(String[] args) {
// 01
try {
String str = "jhfk";
int a = Integer.parseInt(str);
}catch (NumberFormatException e){
System.out.println("异常信息= "+e.getMessage());
}finally {
System.out.println("finally 代码块被执行...");
}
// 02
try {
Person jack = new Person("jack");
jack=null;
System.out.println(jack.getName()); // 会有一个异常
int n1 = 10;
int n2 = 0;
System.out.println(n1/n2); // 会有一个异常
}catch (NullPointerException e){
System.out.println("空指针异常");
}catch (ArithmeticException e){
System.out.println("算术异常");
}catch (Exception e){
System.out.println(e.getMessage());
}
System.out.println("程序继续...");
}
}
class Person{
private String name;
public String getName() {
return name;
}
public Person(String name) {
this.name = name;
}
}
2、t-c-f 练习
package level3.myEXception;
public class ExceptionExercise {
public static void main(String[] args) {
Test test = new Test();
System.out.println(test.method());
}
}
class Test{
public int method(){
int i=1;
try {
i++; // i=2
String[] name = new String[3];
if(name[1].equals("tom")){ // 空指针异常-直接到catch语句块
System.out.println(name[1]);
}else{
name[3]="jack";
}
return 1;
}catch (ArrayIndexOutOfBoundsException e){
return 2;
}catch (NullPointerException e){
return ++i; // 执行 ++i,并赋值给临时变量tmp=3,不会立即返回,会先执行finally语句
// finally语句块中没有return,返回这里的tmp
}finally {
++i; // 执行++i,
System.out.println("i= " + i); // 输出 i=4
// return i; // 若这里有return,直接在这里返回,若没有,返回上级return的地方返回
}
}
}