educoder——面向对象程序设计java——第二阶段Java面向对象(六) - Java中的异常

本文深入讲解Java中的异常处理机制,包括检测性和非检测性异常的区别、常见异常类型及如何捕获和抛出异常。通过实战案例,帮助读者掌握异常处理的最佳实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第1关:Java 中的异常处理机制

  • 1、

    在Java中,源文件Test.java中包含如下代码段,则程序编译运行结果是(B)

     
      
    1. public class HelloWorld{
    2. public static void main(String[] args){
    3. System.out.print(“HelloWorld!”);
    4. }
    5. }
    A、

    输出:HelloWorld!

    B、

    编译出错,提示“公有类HelloWorld必须在HelloWorld.java文件中定义”

    C、

    运行正常,但没有输出内容

    D、

    运行时出现异常

  • 2、

    下列关于检测性异常和非检测性异常正确的是(ACE)

    A、

    IOException及其子类(FileNotFoundException等),都属于检测型异常

    B、

    检测型异常不需要程序员来处理

    C、

    运行时异常可以处理,也可以不处理,是可选的

    D、

    错误也属于异常的一种

    E、

    所有的异常类是从 java.lang.Exception 类继承的子类

  • 3、

    关于下列代码,说法错误的是(D)

     
      
    1. public static void main(String[] args){
    2. int num1 = 10;
    3. int num2 = 0;
    4. System.out.println(num1/num2);
    5. }
    A、

    输出0

    B、

    编译报错,提示除数不能为0

    C、

    输出无穷大

    D、

    运行时报错,提示除数不能为0

第2关:捕获异常 

编程要求

请仔细阅读右侧代码,根据方法内的提示,在Begin - End区域内进行代码补充,具体任务如下:

  • 编辑器中的代码运行时可能会有异常,请利用本关知识处理该异常。

测试说明

补充完代码后,点击测评,平台会对你编写的代码进行测试,当你的结果与预期输出一致时,即为通过。

输入: 4 2

输出: 2

输入: 4 0

输出: 除数不能为0

 

提示:捕获异常需要用特定的类,下表总结了常用的异常类:

非检测型异常:

异常描述
ArithmeticException当出现异常的运算条件时,抛出此异常。例如,一个整数"除以零"时,抛出此类的一个实例。
ArrayIndexOutOfBoundsException用非法索引访问数组时抛出的异常。如果索引为负或大于等于数组大小,则该索引为非法索引。
ClassCastException当试图将对象强制转换为不是实例的子类时,抛出该异常。
IllegalArgumentException抛出的异常表明向方法传递了一个不合法或不正确的参数。
IllegalMonitorStateException抛出的异常表明某一线程已经试图等待对象的监视器,或者试图通知其他正在等待对象的监视器而本身没有指定监视器的线程。
IllegalStateException在非法或不适当的时间调用方法时产生的信号。换句话说,即 Java 环境或 Java 应用程序没有处于请求操作所要求的适当状态下。
IllegalThreadStateException线程没有处于请求操作所要求的适当状态时抛出的异常。
IndexOutOfBoundsException指示某排序索引(例如对数组、字符串或向量的排序)超出范围时抛出。
NegativeArraySizeException如果应用程序试图创建大小为负的数组,则抛出该异常。
NullPointerException当应用程序试图在需要对象的地方使用 null 时,抛出该异常
NumberFormatException当应用程序试图将字符串转换成一种数值类型,但该字符串不能转换为适当格式时,抛出该异常。
StringIndexOutOfBoundsException此异常由 String 方法抛出,指示索引或者为负,或者超出字符串的大小。
......

检测性异常:

异常描述
ClassNotFoundException应用程序试图加载类时,找不到相应的类,抛出该异常。
CloneNotSupportedException当调用 Object 类中的 clone 方法克隆对象,但该对象的类无法实现 Cloneable 接口时,抛出该异常。
IllegalAccessException拒绝访问一个类的时候,抛出该异常。
InstantiationException当试图使用 Class 类中的 newInstance 方法创建一个类的实例,而指定的类对象因为是一个接口或是一个抽象类而无法实例化时,抛出该异常。
InterruptedException一个线程被另一个线程中断,抛出该异常。
NoSuchFieldException请求的变量不存在
NoSuchMethodException请求的方法不存在
IOException及其子类对文件或流的操作有误时,抛出异常
......

 

 

第3关:抛出异常 

编程要求

请仔细阅读右侧代码,根据方法内的提示,在Begin - End区域内进行代码补充,具体任务如下:

  • 异常的抛出和处理。

测试说明

补充完代码后,点击测评,平台会对你编写的代码进行测试,当你的结果与预期输出一致时,即为通过。

预期输出:该文件不存在

 

 第4关:自定义异常

编程要求

请仔细阅读右侧代码,根据方法内的提示,在Begin - End区域内进行代码补充,具体任务如下:

  • 定义一个自定义异常,判断用户名是否小于三位,如果用户名小于三位,就抛出一个自定义异常。

测试说明

补充完代码后,点击测评,平台会对你编写的代码进行测试,当你的结果与预期输出一致时,即为通过。

输入:

admin

输出:

用户名格式正确

输入:

ab

输出:

Exception in thread "main" step4.MyException: 用户名小于三位Exception at step4.Task.main(Task.java:13)

注意:因为抛出异常时会显示行号,请在10行抛出异常,否则评测可能不通过。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值