📅  最后修改于: 2020-04-04 09:31:51             🧑  作者: Mango
在本文中,我们将探讨try-catch-finally的所有可能组合,每当引发异常时都可能发生,以及每种给定情况下控制流的发生方式。
在try-catch或try-catch-finally中控制流
// Java程序展示try-catch或try-catch-finally中控制流
class GFG
{
public static void main (String[] args)
{
// size为4的array
int[] arr = new int[4];
try
{
int i = arr[4];
// 这个块没机会执行
System.out.println("在try内");
}
catch(ArrayIndexOutOfBoundsException ex)
{
System.out.println("异常被捕获");
}
// rest program will be excuted
System.out.println("在try-catch之外");
}
}
输出:
异常被捕获
在try-catch之外
// Java展示try-catch-finally子句中的控制流
class GFG
{
public static void main (String[] args)
{
// size为4的array
int[] arr = new int[4];
try
{
int i = arr[4];
// 这个块没机会执行
System.out.println("在try内");
}
catch(ArrayIndexOutOfBoundsException ex)
{
System.out.println("在catch内的异常");
}
finally
{
System.out.println("finally块被执行");
}
// 剩下的程序被执行
System.out.println("在try-catch-finally之外");
}
}
输出:
在catch内的异常
finally块被执行
在try-catch-finally之外
// Java展示在try块中发生的异常未在catch块中处理
class GFG
{
public static void main (String[] args)
{
// size为4的array
int[] arr = new int[4];
try
{
int i = arr[4];
// 这个块没机会执行
System.out.println("在try块内");
}
// 非一个合适的异常handler
catch(NullPointerException ex)
{
System.out.println("异常被捕获");
}
// 剩下的程序被执行
System.out.println("在try-catch之外");
}
}
运行时错误:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
at GFG.main(GFG.Java:12)
// Java展示在try块中发生的异常未在catch块中处理
class GFG
{
public static void main (String[] args)
{
// size为4的array
int[] arr = new int[4];
try
{
int i = arr[4];
// 这个块没机会执行
System.out.println("在try块内");
}
// 非一个合适的异常handler
catch(NullPointerException ex)
{
System.out.println("异常被捕获");
}
finally
{
System.out.println("finally被执行");
}
// 剩下的不会执行
System.out.println("在try-catch-finally之外");
}
}
输出:
finally被执行
运行时错误:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
at GFG.main(GFG.Java:12)
// Java展示try块中不会发生异常
class GFG
{
public static void main (String[] args)
{
try
{
String str = "123";
int num = Integer.parseInt(str);
// 下面将会被执行
System.out.println("在try内");
}
catch(NumberFormatException ex)
{
System.out.println("catch块被执行...");
}
System.out.println("在try-catch之外");
}
}
输出:
在try内
在try-catch之外
// Java展示try-catch-finally子句,try没有异常
class GFG
{
public static void main (String[] args)
{
try
{
String str = "123";
int num = Integer.parseInt(str);
// 下面将会被执行
System.out.println("try块全部执行");
}
catch(NumberFormatException ex)
{
System.out.println("catch块被执行...");
}
finally
{
System.out.println("finally块被执行");
}
System.out.println("在try-catch-finally之外");
}
}
输出:
try块全部执行
finally块被执行
在try-catch-finally之外
finally控制流程
在这种情况下,无论try块中是否发生异常,都将始终执行finally块。但是控制流程将取决于try块中是否发生了异常。
// Java展示try-finally块,异常在try内发生
class GFG
{
public static void main (String[] args)
{
// size为4的array
int[] arr = new int[4];
try
{
int i = arr[4];
// 这不会被执行
System.out.println("在try内");
}
finally
{
System.out.println("finally块被执行");
}
// 剩下的被执行
System.out.println("在try-finally之外");
}
}
输出:
finally块被执行
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
at GFG.main(GFG.Java:11)
// Java程序,展示try-finally
// 在try内没有发生异常
class GFG
{
public static void main (String[] args)
{
try
{
String str = "123";
int num = Integer.parseInt(str);
// 下面的块将被执行
System.out.println("在try内");
}
finally
{
System.out.println("finally块被执行");
}
// rest program will be executed
System.out.println("在try-finally之外");
}
}
输出:
在try内
finally块被执行
在try-finally之外