第10周预习作业 异常处理机制

1.说出两个我们在使用软件、APP时遇到的错误。这些错误可能是什么类型的错误?你是怎么解决这类错误呢(重启、查看日志…)?

①无响应问题:
错误类型
软件自身问题:软件可能存在程序漏洞、代码逻辑错误或资源管理不善等情况。例如,在处理大量数据或复杂任务时,程序内部的算法出现死循环,导致无法继续正常运行;或者在内存分配上出现不合理的情况,使得软件运行到一定阶段无法获取足够的资源来响应新的操作。
解决办法:强制关闭并重启软件或者等待一段时间看它是否能自行恢复。

②闪退错误
错误类型:闪退是指软件或 APP 在运行过程中突然关闭,退回到设备的主屏幕或其他界面。这可能是多种原因导致的,比如软件自身存在漏洞或兼容性问题,设备内存不足,软件与设备系统版本不兼容等。
解决办法
重启软件:先尝试关闭该软件或 APP(如果它还处于后台运行状态,可以通过设备的任务管理器将其关闭),然后重新打开,看是否还会出现闪退情况。

                    ***此问借助AI生成***

2.说出两个你在编写Java程序时最常遇到的错误。并判定这些错误是什么类型的错误(编译错误、运行时错误)。你认为哪种类型的错误更好解决呢?

语法错误:比如在代码语句的末尾忘记“;”,或者符号类型为中文符号导致编译错误
空指针异常:比如下图代码中定义了一个字符串变量 str 并赋值为 null,然后尝试调用它的 length() 方法,就会抛出空指针异常。
在这里插入图片描述
这种错误为运行时的错误,运行时能得到以下运行提示:
在这里插入图片描述

3.查询JDK文档,说说如下代码哪行抛出了什么类型的异常?为什么该段程序明明可能产生错误,但是不写try…catch,也可编译通过。为上述代码添加try…catch。使得当输入错误时,可提示重新输入,直到输入正确后,才能继续往下执行。

 public static void main(String[] args) {
     int[] x = new int[3];
     Scanner inputScan = new Scanner(System.in);
     for(int i = 0; i < x.length;){
         System.out.println("Please input the "+i+" integer:");
         String inputInt = inputScan.nextLine();  
         x[i] = Integer.parseInt(inputInt);  //注意这里!
         i++;
     }
     System.out.println(Arrays.toString(x)); }

①以上代码中x[i] = Integer.parseInt(inputInt);此行代码会抛出异常,异常类型是NumberFormatException,原因是改行代码中所用的方法只支持传入数字形式的字符串,而不能是字母或符号等非数字字符。控制台抛出异常如下图所示:在这里插入图片描述
②这段程序即使可能产生上述错误,但不写 try…catch 也能编译通过,是因为 NumberFormatException 是一个运行时异常(RuntimeException 的子类)。

③加入try…catch修改后的代码如下:

//修改后的代码如下:
import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        int[] x = new int[3];
        Scanner inputScan = new Scanner(System.in);

        for (int i = 0; i < x.length;) {
            System.out.println("请输入第 " + i + " 个数:");
            String inputInt = inputScan.nextLine();

            try {
                x[i] = Integer.parseInt(inputInt);
                i++;
            } catch (NumberFormatException e) {
                System.out.println("无效输入,请重新输入:");
            }
        }

        System.out.println(Arrays.toString(x));
    }
}

运行结果如下图所示:在这里插入图片描述

4. 将如下代码中NumberFormatException改成Exception可以吗?

    String x = "abc";
    try {
        int a = Integer.parseInt(x);
        System.out.println(a);
    } catch (NumberFormatException e) {
        e.printStackTrace();
    }

在 Java 中,NumberFormatExceptionException 的子类。这意味着 NumberFormatException 类型的异常对象是可以被 Exception 类型的异常处理块所捕获的。所以从语法角度来说,把 catch 块中的异常类型从 NumberFormatException 改成 Exception 能够通过编译,代码可以正常运行。NumberFormatException 是专门用于处理当尝试将一个字符串转换为数字格式(如通过 Integer.parseInt() 等方法)但字符串格式不符合数字要求时抛出的异常。如果改成捕获 Exception,就会把所有类型的异常都捕获到这个 catch 块中,包括可能在 try 块中其他操作(比如除了 Integer.parseInt() 之外还有其他可能抛出不同类型异常的代码)引发的异常。这样就失去了对 NumberFormatException 这种特定异常情况的针对性处理能力,使得后续排查问题和理解代码逻辑时变得困难,因为不清楚具体是哪种类型的异常导致了进入这个 catch 块。

5.查询JDK文档,说说如下代码哪里抛出了什么异常?该异常意味着吗什么?需要捕获吗?为什么?

String fileName = "abc";
FileReader fileReader = new FileReader(fileName);

FileReader fileReader = new FileReader(fileName);此行代码会抛出异常。抛出的异常类型为 FileNotFoundException。如下图所示:
在这里插入图片描述
②该异常意味着系统找不到指定位置的文件。
需要捕获:这种情况下是需要捕获该异常的。因为 FileNotFoundException 属于检查异常(它是 IOException 的子类,而 IOException 属于检查异常范畴)。在 Java 中,对于检查异常,编译器要求要么在当前方法中通过 try…catch 块来处理该异常,要么在方法签名中使用 throws 关键字声明抛出该异常,否则代码将无法通过编译。这是为了确保程序在可能遇到这类可预见的、与外部资源(如文件系统)交互相关的异常情况时,有相应的处理机制,以避免程序因未处理的异常而意外终止,保证程序的健壮性和稳定性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值