当前位置: 首页 > 知识库问答 >
问题:

为什么当参数为null时抛出异常不起作用?

景安翔
2023-03-14

我创建了一个从HashMap中删除学生的方法。当id为NULL时,它会抛出一个异常。有人知道它为什么不起作用吗?

public void deleteStudent(String firstName, String lastName, String phoneNumber, String birthDate, PersonGender gender, String id)  {
        Student student = new Student(firstName, lastName, phoneNumber, birthDate, gender, id);

        if (students.containsKey(id)) {
            students.remove(id);
        }
        if (students.containsKey(id == null)) {
              throw new NullPointerException("The student does not exist");
        }
    }

公共类应用程序{public static void main(String[]args){

    StudentRepository myStudent = new StudentRepository();
    myStudent.addStudent("St","Rt","0742", "1993.03.04", PersonGender.MALE, "1930303");
    myStudent.addStudent("Sr","Ro","0742", "1994.03.04", PersonGender.MALE, "1940304");
    myStudent.addStudent("Se","Rb","0742", "1995.03.04", PersonGender.MALE, "1950305");
    myStudent.addStudent("Sm","Re","0742", "1996.03.04", PersonGender.MALE, "1950306");
    myStudent.deleteStudent("Str","Rob","0742", "1992.03.04", PersonGender.MALE, "null");
    myStudent.addStudent("Sr","Ro","0742", "1994.03.04", PersonGender.MALE, "1940304");
    myStudent.displayStudents();


}

}

共有1个答案

连鸿
2023-03-14

尝试:

public void deleteStudent(String firstName, String lastName, String phoneNumber, String birthDate, PersonGender gender, String id)  {
        Student student = new Student(firstName, lastName, phoneNumber, birthDate, gender, id);

        if (id == null) {
              throw new NullPointerException("ID is null");
        }

        if (students.containsKey(id)) {
            students.remove(id);
        }
        else {
            throw new NullPointerException("The student does not exist");
        }

    }

注:

  1. 假设students不包含键,则引发异常。因此添加了else语句。
  2. 同时,首先检查通过ID。如果找不到,则抛出异常。您可以根据需要对其进行修改。
 类似资料:
  • 下面是我的代码。当我运行它时,我在线程“main”java.lang.IndexOutOfBoundsException:Index:3、Size:2中得到异常,而不是我的异常消息。谁能解释一下我做错了什么,为什么会这样?谢谢!

  • 针对每个循环处理跳过迭代的控件的问题,我发现允许在不断变化的集合上进行迭代: 例如,以下内容: 投掷 InvalidOperationException:集合已修改;枚举操作可能无法执行。 然而,在a。Net窗体,您可以执行以下操作: 它跳过元素,因为迭代器运行在更改的集合上,而不会引发异常 错误?如果基础集合发生变化,迭代器是否需要抛出? 所以我的问题是为什么对不断变化的的迭代不会抛出Inval

  • 问题内容: 我陷入了这个非常奇怪的问题。在客户端中,我传递的对象是 在服务器中,我正在读取对象 我的问题是为什么我会出现EOF异常。我对对象输入流的理解是,当我调用readObject()时应该阻塞直到获得对象,这样才能知道是否达到了eof?请帮忙! 这就是我创建对象流的方式 另外,在我写完对象并刷新之后,我应该关闭流。我不会关闭它,因为对象是从代码的不同部分开始一个接一个地定期编写的。 问题答案

  • 问题内容: 我睡眠不足吗?以下代码 抛出此错误: 这绝对是行不通的!有人可以解释一下吗? 问题答案: 在规格中它说: 每当调用其origin-clean标志设置为false的canvas元素的toDataURL()方法时,该方法都必须引发SECURITY_ERR异常。 如果图像来自其他服务器,我认为您不能使用toDataURL()

  • 问题内容: 根据文档,该方法返回: 如果参数是,则字符串等于; 否则,返回的值。 但是,当我尝试这样做时,怎么会这样: 它会抛出NPE吗?(如果你不相信,请自己尝试!) 怎么会这样呢?文件在骗我吗?这是Java中的主要错误吗? 问题答案: 问题是方法已重载: String.valueOf(Object) String.valueOf(char[]) Java规范语言要求在这种情况下,选择最具体的重

  • 问题内容: 因此,如果我有一个,由于某种原因,如果我在另一段代码(如)中引用它,则在编译过程中它不会内联到代码中。因此,它不是在被编译之后而是。 问题答案: 您不是编译时间常数,因为JLS 表示 不是。只能在常量表达式中使用的类型是基本类型和。 它的意义是,一个实例(通常)具有语义上重要的对象标识,该标识将其与其他实例区分开。此对象标识不能编码在类文件中……至少,不能用当前的类文件格式编码。(如果