如何解决BookException必须被捕获或声明为抛出的未报告异常



如果任何先决条件失败,我正试图让赋值函数方法生成"BookException",但我遇到了一个错误,我不确定如何解决它。

public class Book
{
    int n ;
    BookTypes t;
    String title;
    double price;
    public void Book (int n, BookTypes t, String title, double price)
    {
        setTitle(title);// error
        setnumberOfPages(n);//error
        setPrice(price);//error
        setType(t);
    }
    public void  setTitle(String title) throws BookException
    {
        if (title == null || title.length() < 1)
        {
            //throw new BookException("Stuff");
            //System.out.println("Excepton");
        }
        else
        {
            this.title = title;
        }
    }
    public String getTitle()
    {
        return title;
    }
    public void setnumberOfPages(int n) throws  BookException    
    {
        if ( n < 1)
        {
            System.out.println("Excepton");
        }
        else
        {
            this.n = n;
        }
    }
    public int getnumberOfPages()
    {
        return n;
    }
    public void setPrice(double price) throws  BookException
    {
        if (price < 0)
        {
           System.out.println("Excepton");
        }
        else
            this.price = price;
    }
    public double getPrice()
    {
        return price;
    }
    public void setType(BookTypes t)
    {
        this.t = t;
    }
    public BookTypes getBookTypes()
    {
        return t;
    }
    public enum BookTypes {
        HARDBACK,
        SOFTBACK,
        ELECTRONIC;
    }
}

这就是我试图覆盖异常构造函数的地方

public class BookException extends Exception
{
    public BookException()
    {
    }
    public BookException(String message, Throwable throwable) 
    {
        super(message, throwable);
    }
}

这就是我试图测试Book类的地方,但我还没有走那么远。我之所以把它包括在内,是因为我不知道。

public class  UseBook
    {
        public static void main(String[] args) 
        {
            System.out.println("Hello World!");
            Book b1 = null;
            Book b2 = null;
            try
            {
                b1 = new Book(90, BookTypes.HARDBACK, "Lord of the Flies", 8.99);
                System.out.println(b1);
            }
            catch (Book Exception )
            {
                System.err.println(e.getMessage());
            }
            try
            {
                b1.SetnumberOfPages(-9);
            }
            catch (Book Exception)
            {
                System.err.println(e.getMessage());
            }
        }
    }

Wiard,它是如何编译的。

是什么

catch (Book Exception )
{System.err.println(e.getMessage());
}

应该是

catch (BookException e)
{System.err.println(e.getMessage());
}

您有一大堆编译错误。您正在使用eclipse或intelliJ之类的IDE吗?这些应该标记它们,并给你一个合理的提示,告诉你需要做什么。

更改

public void Book (int n, BookTypes t, String title, double price)

public Book (int n, BookTypes t, String title, double price) throws BookException

void使其成为一个方法,移除它使其成为构造函数,这正是您所需要的。您还需要在其上添加一个throws(或在构造函数中捕获并处理它)

更改

catch (Book Exception )

catch (BookException e)

捕获错误,您需要像catch (ExceptionClass name) 一样指定它

更改

b1.SetnumberOfPages(-9);

b1.setnumberOfPages(-9);

方法调用的小写s。

现在代码至少可以编译了,你会得到的输出

Hello World!
com.example.Book@4e50df2e
Excepton

还有很多其他事情你应该解决,但是IDE应该给你一些指针。

最新更新