程序的异常

任何一个程序都有可能发生异常,本节将主要讲解关于 Java 的异常处理。主要内容包含异常的基础理论以及如何捕获异常。

知识点
异常分类
声明及抛出
捕获异常
自定义异常
异常堆栈

异常指不期而至的各种状况,它在程序运行的过程中发生。作为开发者,我们都希望自己写的代码永远都不会出现bug,然而现实告诉我们并没有这样的情景。如果用户在程序的使用过程中因为一些原因造成他的数据丢失,这个用户就可能不会再使用该程序了。所以,对于程序的错误以及外部环境能够对用户造成的影响,我们应当及时报告并且以适当的方式来处理这个错误。

之所以要处理异常,也是为了增强程序的鲁棒性。

异常都是从Throwable类派生出来的,而Throwable类是直接从Object类继承而来。你可以在 Java SE 官方 API 文档中获取更多关于它们的知识。

异常通常有四类:

Error:系统内部错误,这类错误由系统进行处理,程序本身无需捕获处理
Exception:可以处理的异常
RuntimeException:可以捕获,也可以不捕获的异常
继承 Exception 的其他类:必须捕获,通常在 API 文档中会说明这些方法抛出哪些异常
平时主要关注的异常是 Exception 下的异常,而 Exception 异常下又主要分为两大类异常,一个是派生于 RuntimeExcption 的异常,一个是除了 RuntimeExcption 体系之外的其他异常。

RuntimeExcption 异常(运行时异常)通常有以下几种:

错误的类型转换
数组访问越界
访问 null 指针
算术异常
一般来说,RuntimeException 都是程序员的问题。

非 RuntimeException(受查异常)一般有:

打开一个不存在的文件
没有找到具有指定名称的类
操作文件异常
受查异常是编译器要求必须处理的异常,必须使用 try catch 处理,或者向上抛出,给上层处理。

throw 抛出异常
当程序运行时数据出现错误或者我们不希望发生的情况出现的话,可以通过抛出异常来处理。

异常抛出语法:

throw new 异常名();
copy
在/home/project/目录下新建ThrowTest.java

public class ThrowTest {

public static void main(String[] args) {
    Integer a = 1;
    Integer b = null;
    //当a或者b为null时,抛出异常
    if (a == null || b == null) {
        throw new NullPointerException();
    } else {
        System.out.println(a + b);
    }
}

}
copy
$ javac ThrowTest.java
$ java ThrowTest
Exception in thread “main” java.lang.NullPointerException
at ThrowTest.main(ThrowTest.java:8)
copy
throws 声明异常
throws 用于声明异常,表示该方法可能会抛出的异常。如果声明的异常中包括 checked 异常(受查异常),那么调用者必须处理该异常或者使用 throws 继续向上抛出。throws 位于方法体前,多个异常使用,分割。

修改/home/project/下的ThrowsTest.java

import java.io.FileInputStream;
import java.io.FileNotFoundException;

public class ThrowsTest {

public static void main(String[] args) throws FileNotFoundException {
    //由方法的调用者捕获异常或者继续向上抛出
    throwsTest();

}

public static void throwsTest() throws FileNotFoundException {
    new FileInputStream("/home/project/shiyanlou.file");
}

}
copy
编译运行:

$ javac ThrowsTest.java
$ java ThrowsTest
Exception in thread “main” java.io.FileNotFoundException: /home/project/shiyanlou.file (系统找不到指定的路径。)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(FileInputStream.java:195)
at java.io.FileInputStream.(FileInputStream.java:138)
at java.io.FileInputStream.(FileInputStream.java:93)
at ThrowsTest.throwsTest(ThrowsTest.java:13)
at ThrowsTest.main(ThrowsTest.java:8)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python提供了异常处理机制来处理程序中的错误和异常异常处理机制涉及到以下关键字和语句:try、except、else、finally和raise。 1. try-except语句用于捕获和处理异常。在try块中,我们可以放置可能会引发异常的代码。如果try块中的代码引发了异常,那么程序将跳转到对应的except块,并执行其中的代码来处理异常。except块可以指定捕获特定类型的异常,也可以使用通用的异常类型来捕获所有异常。 2. else语句在try块中的代码没有引发异常时执行。如果try块中的代码没有引发异常,那么程序将跳过except块,直接执行else块中的代码。 3. finally语句用于定义无论是否发生异常都要执行的代码。无论try块中的代码是否引发异常,finally块中的代码都会被执行。 4. raise语句用于手动引发异常。我们可以使用raise语句来主动抛出异常,从而中断程序的正常执行流程。 以下是一个示例,演示了Python程序异常处理的基本用法: ```python try: # 可能引发异常的代码 num1 = int(input("请输入一个整数: ")) num2 = int(input("请输入另一个整数: ")) result = num1 / num2 print("结果为:", result) except ValueError: # 处理值错误异常 print("输入的不是有效的整数") except ZeroDivisionError: # 处理除零异常 print("除数不能为零") except Exception as e: # 处理其他异常 print("发生了一个异常:", str(e)) else: # 没有发生异常时执行的代码 print("没有发生异常") finally: # 无论是否发生异常都会执行的代码 print("程序结束") ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值