Java基础_14 | Java中的异常处理机制详解

1. Java中的异常处理机制

什么是异常

异常是指程序运行中发生的非正常现象,比如:

  • 数组访问越界
  • 除数为0
  • 网络中断
  • 文件不存在
  • ……

为什么需要异常处理

上述非正常现象在程序运行中不可避免,所以异常处理机制使得程序更加健壮,可靠。

Java中可以捕获那些异常

Java将异常分为Exception(异常) 和Error(错误) 两大类:

  • Exception类(异常):解决由程序本身及环境所产生的异常,可以被捕获并进行处理;
  • Error类(错误):处理内部系统错误,不可被处理,程序关闭。

java.lang 包是提供利用 Java 编程语言进行程序设计的基础类包,而异常处理类就是在该包中,如图是我从JDK 手册中截取出来的:

2. Java的异常处理方法

直接捕获处理

在Java中,对于异常可以直接捕获处理,处理方法如下:

try{
	//有可能产生异常的代码
}
catch (异常类名1 异常对象名1){
	//处理该异常的代码
}
finally{
	//无论是否发生异常,都会执行
}

如下是一个检测数组越界异常的处理示例:

public class ExceptionDemo01 {
    public static void main(String[] args) {
        try {
           int a[] = {1, 2, 3};
           int sum = 0;

            //判断条件改为i<3时运行正常
            //判断条件改为i<=3时,报异常,数组越界
           for(int i = 0;i <= 3; i++) {
                sum += a[i];
           }
           System.out.println("sum = " + sum);
        }
        catch(ArrayIndexOutOfBoundsException e) {
            System.out.println(e.toString());
        }
        finally {
            System.out.println("finish");
        }
    }
}

执行结果如下:

抛出异常

在Java中,抛出异常有两种情况:

  • 类的方法中不处理异常,抛出交由调用者处理
  • 自定义异常类,主动抛出;(见后面,下一节重点讲述)

第一种情况下,方法参数之后应该加入如下代码:

throws 异常类型名

示例代码如下:

class MyMath {
    //该方法主动抛出异常
    public int  div(int a, int b) throws Exception {
        return a/b;
    }
}

public class ExceptionDemo02 {
    public static void main(String[] args) {
        MyMath m = new MyMath();
        try {
            m.div(1, 0);
        }
        catch (Exception e) {
            System.out.println("Warning:" + e.toString());
        }
        finally {
            System.out.println("finish!");
        }
    }
}

3. 自定义异常类并主动抛出异常

自定义异常类通过继承Exception类来实现:

class 自定义异常类名 extends Exception {
	//异常类体
}

有以下两点需要注意:

  • 自定义异常类将继承Exception 类的所有方法
  • 可以在类体中定义其他处理方法

主动抛出该自定义异常类时的语法如下:

throw new 异常类名(信息)

其中信息部分是可选的,如果有,将会增加在toString()方法的返回值中。

示例代码如下:

//自定义异常类TestException 
class TestException extends Exception {
    public TestException() {
        System.out.println("发生异常啦~~~");
    }
}

public class ExceptionDemo03 {
    public static void main(String[] args) {
        int m = 5;
        try {
            if(m > 0) {
                throw new TestException();
            }
        }
        catch (TestException e) {
            System.out.println(e.toString());
        }
        finally {
            System.out.println("finish!");
        }
    }
}

接收更多精彩文章及资源推送,欢迎订阅我的微信公众号:『mculover666』

发布了208 篇原创文章 · 获赞 559 · 访问量 24万+

猜你喜欢

转载自blog.csdn.net/Mculover666/article/details/104316532