从构造函数引发异常?

时间:2019-10-14 23:27:01

标签: java exception try-catch

public Section(Course course, String sectionNumber)
        throws SectionException
{

try 
{
/* No checking needed as a course is defined by another class. */
this.thisCourse = course;
this.sectionNumber = DEFAULT_SECTION_NUMBER;
if( isValidSectionNumber(sectionNumber) )
    this.sectionNumber = sectionNumber;
} catch( ValidationException ex ) 
{
    throw new SectionException("Error in constructor", ex);
}
}

你好,这是我的代码,如果此构造函数失败,则需要抛出SectionException,但由于“ ValidationException的catch块无法到达。因此,我不会从try语句主体中抛出此异常” 我如何解决它? 这是类似的代码,可以正常工作

public Student(String studentID, String firstName, String lastName)
        throws StudentException
{
    /* Initialize with the provided data using the validated values. */
    try
    {
        if( isValidStudentID(studentID) )
        this.studentID = studentID;
        if( isValidFirstName(firstName) )
            this.firstName = firstName;
        if( isValidLastName(lastName) )
            this.lastName = lastName;
    } catch( ValidationException ex )
    {
        throw new StudentException("Error in constructor", ex);
    }
}

1 个答案:

答案 0 :(得分:0)

您的catch块不可访问,因为try块中没有任何东西抛出ValidationException。手动引发此异常,例如:

if (isValidSectionNumber(sectionNumber))
    this.sectionNumber = sectionNumber;
else
    throw new ValidationException("Validation error: section number invalid");

或者让您的渔获接受一般性错误,例如

catch (Exception e) { /* other code here */ }

或者,您也可以从if条件中使用的一种方法中丢弃它。

我想在您提供的工作代码中,isValidStudentId()isValidFirstName()isValidLastName()中的一个或多个会抛出ValidationException,而在您的代码中却没有。不知不觉就无法分辨。