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

时间:2019-03-29 19:37:49

标签: java class constructor illegalargumentexception

我正在类的构造函数类中抛出throw IllegalArgumentException语句,以检查用户输入的年龄是否高于所需的maxAge。如果输入的年龄比IllegalArgumentException高,我正在使用if语句向用户抛出maxAge。 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;
        }   
    }

2 个答案:

答案 0 :(得分:0)

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

我建议您格外小心使用类似的变量名。随着项目变得越来越大,越来越复杂,它将为您省去很多麻烦。

答案 1 :(得分:0)

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

以上代码行将抛出

  

java.lang.NullPointerException

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