有人可以解释为什么我在这段代码中遇到错误

Can someone please explain why I'm getting an error in this code

我在我的 class 的构造函数 class 中做一个 throw IllegalArgumentException 语句来检查用户输入的年龄是否高于 maxAge 想要的.如果输入的年龄高于 maxAge,我使用 if 语句向用户抛出 IllegalArgumentException。 IDE 给我的错误是 java.lang.NullPointerException.

我曾尝试在 if 语句之外声明和分配值,例如

int timePeriod = (Period.between(bday, LocalDate.now()).getYears()); 
int maxAge = 101;

检查我是否仍然收到错误。问题似乎出在 periods.between >> getYear 语句中。

代码:

    public Instructor(String fname, String lname, int ID, String road, String cty, String postalCode, LocalDate reg, LocalDate bDay) throws IllegalArgumentException 
    {   
        int timePeriod = (Period.between(bday, LocalDate.now()).getYears());
        int maxAge = 101; 
        System.out.print(timePeriod);
        //if (101 < (Period.between(bday, LocalDate.now()).getYears())) { 
        if (maxAge < timePeriod) { 

            throw new IllegalArgumentException("Please check the year entered, instructor cannot be over 100 years old.");
        } 
        else { 
            this.first = fname;
            this.last = lname;
            this.instructID = ID; 
            this.address = road;
            this.city = cty;
            this.postCode = postalCode;
            this.regDate = reg;
            this.bday = bDay;
        }   
    }

我认为您的问题是您使用的是实例变量 bday 而不是传递的参数 bDay。 bday 尚未创建,因此不存在。

我建议您对这样的封闭变量名格外小心。当您的项目变得越来越大和越来越复杂时,它将为您省去很多麻烦。

Period.between(null, LocalDate.now());

上面的代码行将抛出

java.lang.NullPointerException

尝试在 startDate 中传递非空值并在代码中添加空值检查以避免任何此类异常。