一、概念
Try-catch-finally不一定要同时存在,就像if else一样,可以只有Try-catch,没有finally
try{}语句块中放的是要检测的java代码,可能有会抛出异常,也可能会正常执行
catch(异常类型){}块是当java运行时系统接收到try块中所抛出的异常对象时,会寻找能处理这异常catch块来处理(可以有多个catch块)
finally{}不管系统有没有抛出异常都会去执行,一般用来释放资源,除了在之前执行了System.exit(0)
二、代码理解
try-finally
class Person{
String name;
}
public class Test {
public static void main(String[] args) {
Person p = null;
//try里的代码出错,还会继续执行代码,程序不会中断
try{
p.name = "xiao";
}finally{
System.out.println("end");
}
}
}
/*
end
Exception in thread "main" java.lang.NullPointerException
at Test.main(Test.java:10)
*/
Try-catch-finally
class Person{
String name;
}
public class Test {
public static void main(String[] args) {
Person p = null;
try{
p.name = "xiao";
}catch(java.lang.NullPointerException e){
System.out.println("空指针异常"); //异常处理程序
}finally{
System.out.println("end");
}
}
}
/*
空指针异常
end
*/
Try-catch
import java.util.Scanner;
class Person{
String name;
}
public class Test {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Person p = null;
int a =10;
int b = 0;
double c = 0.0;
System.out.println("请输入除数:");
b = sc.nextInt();
try{
p.name = "xiao";
c = (double)a/b;
}catch(Exception e){ //捕获所有异常,只要有异常,就会执行里面代码
System.out.println("空指针异常"); //捕获到空指针,就会执行下面的语句,即便是没有出现异常
System.out.println("输入了0,重新输入");
b = sc.nextInt();
c = (double)a/b;
System.out.println("c=" + c);
}
System.out.println("c=" + c);
System.out.println("end1");
}
}
/*
请输入除数:
2
空指针异常 //捕获了所有异常
输入了0,重新输入
2
c=5.0
c=5.0
end1
*/