java实验报告(实验七 异常处理)

一. 实验目的

掌握 Java 程序中异常的概念,能熟练应用异常处理机制,设计出健壮性和可读性好的程序。

二. 实验内容

(一) 异常的发生

1.运行时异常

//RTExp.java
public class RTExp {
    public static void main(String[] args) {
// TODO Auto-generated method stub
        int d1 = Integer.parseInt(args[0]);
        int d2 = Integer.parseInt(args[1]);
        double result = d1 / d2;
        System.out.println(args[0] + "/" + args[1] + "=" + result);
    }
}

编译以上 java 程序 然后在命令行下运行,观察结果并分析。

(1) java RTExp 1 
(2) java RTExp 1 0 
(3) java RTExp 1 a 

2.非运行时异常
常见的有加载类或接口失败,文件未找到等。 以下代码演示 ClassNotFoundException 运行 TestLoader,观察输出并分析。 补充定义被加载的类 Main,如下:

//先定义一个类加载器
public class MyClassLoader extends ClassLoader {
    public Class loadClass(String name) {
        Class c = null;
        try {
            c = loadClass(name, true);
        } catch (ClassNotFoundException ce) {
            ce.printStackTrace();
        }
        return c;
    }
}
//再定义测试类

import java.lang.reflect.Method;

public class TestLoader {
    public static void main(String[] args) {
        MyClassLoader loader = new MyClassLoader();
        Class main = loader.loadClass("Main");
        System.out.println(main.toString());
        Method[] ms = main.getMethods();
        for (Method mt : ms) {
            System.out.println(mt.toString());
        }
    }
}

运行 TestLoader,观察输出并分析。

补充定义被加载的类 Main,如下:

public class Main {
    public static void main(String[] args) {
// TODO Auto-generated method stub
        System.out.println("Clas Main/method main");
    }
    public void test(){
        System.out.println("just test.");
    }
}

再次运行 TestLoader,并分析运行结果。

(二) 异常处理机制
  1. 修改 RTExp 类,对数组越界和输入数据格式错误进行检查。

  2. 多异常处理时,注意 catch 语句块的顺序。 修改一下代码错误,使其通过编译,并输入不同测试用例,分析结果。

import java.util.InputMismatchException;
import java.util.Scanner;

public class MultiCatch {
    public static void main(String[] args) {
// TODO Auto-generated method stub
        try {
            Scanner sc = new Scanner(System.in);
            int i = sc.nextInt();
        } catch (Exception e) {
            e.printStackTrace();
        } catch (InputMismatchException ie) {
            ie.printStackTrace();
        } catch (IllegalStateException le) {
            le.printStackTrace();
        }
    }
}
(三) 自定义异常

自行设计相关类,实现用户登录功能,用异常体现业务规则。如用户登 录 时 需 要 输 入 用户名 和 密码, 如 果 不 匹配, 则 抛 出 NamePasswordMismatchException,要求重新输入,如果错误超过三次,则引发 ToomanyErrorsException,并结束程序运行

三、实验结果

(一) 异常的发生
1、
2、运行 TestLoader,观察输出并分析。
在这里插入图片描述

补充定义被加载的类 Main,

(二) 异常处理机制

(三) 自定义异常
目录结构

在这里插入图片描述

public class NamePasswordMismatchException extends RuntimeException {
    public NamePasswordMismatchException(String message) {
        super(message);
    }
}

public class ToomanyErrorsException extends Exception {
    public ToomanyErrorsException(String message) {
        super(message);
    }

}
import java.util.Scanner;

public class Login {
    private static String username = "张三";
    private static String password = "123456";

    public static void main(String[] args) throws ToomanyErrorsException, NamePasswordMismatchException {

        Scanner scanner = new Scanner(System.in);
        int count = 0;
        System.out.println("请输入用户名: ");
        String username = scanner.next();

        while (true) {
            System.out.println("请输入密码: ");
            String password = scanner.next();
            if ("登录成功".equals(login(username, password))) {
                System.out.println("登录成功");
                break;
            }
            count++;
            if (count==3){
                throw new ToomanyErrorsException("密码输入次数已达上限!!!");
        }
    }
}

    public static String login(String username, String password) throws NamePasswordMismatchException {
        if (!Login.username.equals(username)) {
            System.out.println("该用户名尚未注册,请核对后输入");
            return "用户名有误";
        } else {
            if (!Login.password.equals(password)) {
                try {
                    throw new NamePasswordMismatchException("密码输入有误");
                } catch (Exception e) {
                    e.printStackTrace();
                }
            } else {
                return "登录成功";
            }
            return "密码有误";
        }
    }
}

在这里插入图片描述
在这里插入图片描述

  • 4
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
很抱歉,作为AI语言模型,我无法完成实验报告的撰写任务。不过我可以提供一些关于Java异常处理的信息,希望能对你有所帮助。 Java异常处理Java编程语言中的重要概念之一,可以帮助开发人员编写更加健壮、可靠的程序。当程序发生异常情况时,Java虚拟机会抛出异常,如果不进行处理,程序将会中断运行。因此,了解异常处理的相关知识是非常必要的。 Java异常分为Checked Exception和Unchecked Exception两种类型。Checked Exception必须在代码中进行处理或者抛出,否则编译器会报错。而Unchecked Exception则不需要显式进行处理,可以在代码中选择处理或者让程序崩溃。 在Java中,异常处理主要通过try-catch-finally语句块来实现。try块中包含可能引发异常的代码,catch块中包含异常处理代码,finally块中包含一定会执行的代码,无论try块中是否发生异常。 以下是一个简单的Java异常处理示例代码: ```java public class ExceptionTest { public static void main(String[] args) { try { int[] array = new int[5]; array[10] = 3; } catch (ArrayIndexOutOfBoundsException e) { System.out.println("数组越界异常"); } finally { System.out.println("finally块一定会执行"); } } } ``` 在上面的代码中,try块中修改了一个长度为5的数组的第10个元素,会引发ArrayIndexOutOfBoundsException异常。在catch块中对这个异常进行了处理,输出了一条错误信息。在finally块中输出了一条一定会执行的信息。 希望这些信息对你有所帮助。如果你还有其他问题或需要更深入的了解,可以随时向我提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值