异常处理

程序中总是存在着各种问题,为了使在程序执行过程中能正常运行,使用Java提供的异常处理机制捕获可能发生的异常,对异常进行处理并使程序能正常运行。这就是Java的异常处理。

比如说,你的代码少了一个分号,那么运行出来结果是提示是错误 ​​java.lang.Error​​;如果你用​​System.out.println(11/0)​​,那么你是因为你用0做了除数,会抛出 ​​java.lang.ArithmeticException​​ 的异常

主要的异常类型有以下几种:

  • 检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存在文件时,一个异常就发生了,这些异常在编译时不能被简单地忽略。
  • 运行时异常: 运行时异常是可能被程序员避免的异常。与检查性异常相反,运行时异常可以在编译时被忽略。
  • 错误: 错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略。例如,当栈溢出时,一个错误就发生了,它们在编译也检查不到的。

异常的结构

15:Java异常处理_代码块

从大体来分异常为两块:

1、error---错误 : 是指程序无法处理的错误,表示应用程序运行时出现的重大错误。例如​​jvm​​运行时出现的​​OutOfMemoryError​​以及Socket编程时出现的端口占用等程序无法处理的错误。

2、Exception --- 异常 :异常可分为运行时异常跟检查性异常

异常的处理

在Java中当程序出现异常时,可以使用 ​​try···catch​​ 和​​try···catch···finally​​进行处理。

  • 使用try···catch处理异常

try后是正常执行的语句,而catch后是对异常处理的语句,catch的括号中是程序需要处理的异常类型。语法格式如下:

try {
正常执行的语句
} catch(Exception e) {
对异常进行处理的语句
}


例:

public class Demo01 {
public static void main(String[] args) {
try {
int result = 1 / 0;
System.out.println(result);
} catch (Exception e) {
System.out.println("抛出异常:" + e.getMessage());
}
}
}


因为有异常,所以不执行try后的语句,从而执行catch后的语句。其中“​​e.getMessage()​​”是获取异常信息的方法,用于获取详细消息字符串;此外还有​​printStackTrace()​​方法,用于将其栈踪迹输出至标准错误流;​​toString()​​方法用于获得简短描述。

  • 使用try···catch···finally处理异常

finally关键字后的语句无论是否发生异常都要执行,因此finally语句块通常用于执行垃圾回收。语法格式如下:

try {
正常执行的语句
} catch(Exception e) {
对异常进行处理的语句
} finally {
一定会被处理的语句
}


例:

public class Demo02 {
public static void main(String[] args) {

try {
int result = 1 / 0;
System.out.println(result);
} catch (Exception e) {
System.out.println("抛出异常:" + e.toString());
}finally {
System.out.println("执行程序");
}
}
}


运行结果:

抛出异常:java.lang.ArithmeticException: / by zero
执行程序


关于finally 关键字

  • finally 关键字用来创建在 try 代码块后面执行的代码块。
  • 无论是否发生异常,finally 代码块中的代码总会被执行。
  • 在 finally 代码块中,可以运行清理类型等收尾善后性质的语句。


抛出异常

如果一个方法没有捕获到一个检查性异常,那么该方法必须使用 throws 关键字来声明。throws 关键字放在方法签名的尾部。

也可以使用 throw 关键字抛出一个异常,无论它是新实例化的还是刚捕获到的。

  • 使用throws声明抛出异常

throws用于方法声明,在声明方法时使用throws声明抛出异常,然后在调用该方法中对异常进行处理。语法格式如下:

数据类型 方法名(形参列表) throws 异常类1, 异常类2, ……, 异常类n {
方法体;
}


例:

public class Demo03 {

public void say() throws Exception {
int result = 1 / 0;
System.out.println(result);
}
}


  • 使用throw声明抛出异常

如果希望程序自行抛出异常,可以使用throw语句来实现。语法格式如下:

 throw new Exception("对异常的说明"); 


使用throw语句抛出的是异常类的实例,通常与if语句一起使用。如:

public class Demo03 {

public static void say() throws Exception {
int i = 3;
if (i >= 0){
throw new Exception("对异常的说明");
}else {
System.out.println("正确");
}
}
}