本文概述
- Java尝试块
- Java catch块
- 没有异常处理的问题
- 通过异常处理解决
- Java try-catch块的内部工作
如果try块的特定语句发生异常, 则其余的块代码将不执行。因此, 建议不要将代码保留在不会引发异常的try块中。
【Java try-catch块】Java try块之后必须是catch或finally块。
Java try-catch的语法
try{
//code that may throw an exception
}catch(Exception_class_Name ref){}
try-finally块的语法
try{
//code that may throw an exception
}finally{}
Java catch块 Java catch块用于通过在参数中声明异常的类型来处理异常。声明的异常必须是父类异常(即Exception)或生成的异常类型。但是, 好的方法是声明生成的异常类型。
catch块只能在try块之后使用。你可以将多个catch块与单个try块一起使用。
没有异常处理的问题 如果不使用try-catch块, 让我们尝试理解问题。
例子1
public class TryCatchExample1 { public static void main(String[] args) {int data=http://www.srcmini.com/50/0;
//may throw exception System.out.println("rest of the code");
}
}
立即测试
输出:
Exception in thread "main" java.lang.ArithmeticException: / by zero
如上例所示, 其余代码未执行(在这种情况下, 未打印其余代码语句)。
异常后可以有100行代码。因此, 异常后的所有代码都不会执行。
通过异常处理解决 让我们看看通过java try-catch块解决上述问题的方法。
例子2
public class TryCatchExample2 { public static void main(String[] args) {
try
{
int data=http://www.srcmini.com/50/0;
//may throw exception
}
//handling the exception
catch(ArithmeticException e)
{
System.out.println(e);
}
System.out.println("rest of the code");
}
}
立即测试
输出:
java.lang.ArithmeticException: / by zero
rest of the code
现在, 如以上示例所示, 其余代码将被执行, 即其余代码语句将被打印出来。
例子3
在此示例中, 我们还将代码保留在不会引发异常的try块中。
public class TryCatchExample3 { public static void main(String[] args) {
try
{
int data=http://www.srcmini.com/50/0;
//may throw exception
// if exception occurs, the remaining statement will not exceute
System.out.println("rest of the code");
}
// handling the exception
catch(ArithmeticException e)
{
System.out.println(e);
} }
}
立即测试
输出:
java.lang.ArithmeticException: / by zero
在这里, 我们可以看到, 如果try块中发生异常, 则其余的块代码将不会执行。
例子4
在这里, 我们使用父类异常处理异常。
public class TryCatchExample4 { public static void main(String[] args) {
try
{
int data=http://www.srcmini.com/50/0;
//may throw exception
}
// handling the exception by using Exception class
catch(Exception e)
{
System.out.println(e);
}
System.out.println("rest of the code");
}
}
立即测试
输出:
java.lang.ArithmeticException: / by zero
rest of the code
例子5
让我们看一个在异常情况下打印自定义消息的示例。
public class TryCatchExample5 { public static void main(String[] args) {
try
{
int data=http://www.srcmini.com/50/0;
//may throw exception
}
// handling the exception
catch(Exception e)
{
// displaying the custom message
System.out.println("Can't divided by zero");
}
}
}
立即测试
输出:
Can't divided by zero
例子6
让我们看一个示例, 以解决catch块中的异常。
public class TryCatchExample6 { public static void main(String[] args) {
int i=50;
int j=0;
int data;
try
{
data=http://www.srcmini.com/i/j;
//may throw exception
}
// handling the exception
catch(Exception e)
{
// resolving the exception in catch block
System.out.println(i/(j+2));
}
}
}
立即测试
输出:
25
例子7
在此示例中, 我们将try代码与try块一起封装在catch块中。
public class TryCatchExample7 { public static void main(String[] args) {try
{
int data1=50/0;
//may throw exception }
// handling the exception
catch(Exception e)
{
// generating the exception in catch block
int data2=50/0;
//may throw exception }
System.out.println("rest of the code");
}
}
立即测试
输出:
Exception in thread "main" java.lang.ArithmeticException: / by zero
在这里, 我们可以看到catch块不包含异常代码。因此, 请将异常代码包含在try块中, 并仅将catch块用于处理异常。
例子八
在此示例中, 我们使用其他类型的异常类(ArrayIndexOutOfBoundsException)处理生成的异常(算术异常)。
public class TryCatchExample8 { public static void main(String[] args) {
try
{
int data=http://www.srcmini.com/50/0;
//may throw exception }
// try to handle the ArithmeticException using ArrayIndexOutOfBoundsException
catch(ArrayIndexOutOfBoundsException e)
{
System.out.println(e);
}
System.out.println("rest of the code");
}
}
立即测试
输出:
Exception in thread "main" java.lang.ArithmeticException: / by zero
例子9
让我们看一个示例来处理另一个未经检查的异常。
public class TryCatchExample9 { public static void main(String[] args) {
try
{
int arr[]= {1, 3, 5, 7};
System.out.println(arr[10]);
//may throw exception
}
// handling the array exception
catch(ArrayIndexOutOfBoundsException e)
{
System.out.println(e);
}
System.out.println("rest of the code");
}
}
立即测试
输出:
java.lang.ArrayIndexOutOfBoundsException: 10
rest of the code
例子十
让我们看一个处理检查异常的例子。
import java.io.FileNotFoundException;
import java.io.PrintWriter;
public class TryCatchExample10 { public static void main(String[] args) {PrintWriter pw;
try {
pw = new PrintWriter("jtp.txt");
//may throw exception
pw.println("saved");
}
// providing the checked exception handler
catch (FileNotFoundException e) {System.out.println(e);
}
System.out.println("File saved successfully");
}
}
立即测试
输出:
File saved successfully
Java try-catch块的内部工作
文章图片
JVM首先检查是否处理了异常。如果未处理异常, 则JVM提供一个默认的异常处理程序, 该异常处理程序执行以下任务:
- 打印出异常描述。
- 打印堆栈跟踪(发生异常的方法的层次结构)。
- 使程序终止。
推荐阅读
- android开发里跳过的坑——android studio 错误Error:Execution failed for task ':processDebugManifest'. &g
- Java抛出关键字(throw和throws)
- Java抛出异常(throw关键字:throw关键字)
- Java静态嵌套类
- Java套接字编程
- Java中的ResourceBundle类
- Applet中的参数
- 小程序中的绘画
- newInstance()方法