我在运行自定义异常时遇到问题,即使没有异常空间,它也会在运行时抛出异常
import java.util.Scanner;
public class Book
{
public String title, author;
public int publication_year;
public Book( String title, String author, int publication_year )
{
this.title=title;
this.author=author;
this.publication_year=publication_year;
}
public static void main( String[] args ) throws BookNotFoundException
{
Book b1 = new Book( "the mocking bird", "james polk", 2005 );
Book b2 = new Book( "the great gatsby", "scott fitzgerald", 1925 );
Book b3 = new Book( "data science", "john doe", 2009 );
System.out.println( "enter book title to search any book" );
String s;
Scanner sc = new Scanner( System.in );
s=sc.next();
Library obj = new Library();
obj.findBook( s );
}
}
class BookNotFoundException extends Exception
{
BookNotFoundException( String message )
{
super( message );
}
}
class Library
{
Book ob = new Book( null, null, 0 );
public void findBook( String bookTitle ) throws BookNotFoundException
{
if( bookTitle == ob.title )
{
System.out.println("book found");
}
else
{
throw new BookNotFoundException( "book not found" );
}
}
}
在此代码中,即使您输入有效的书名而不是给出输出“找到的书”,它也会引发异常。
您正在搜索
Library
实例来查找给定标题,但 Library
仅包含 Book
的一个实例,且 title
和 author
设置为 null
。
无论你输入什么标题,结果总是例外。
您的比较(
bookTitle == ob.title
)对于您可能的预期目的也是不正确的,在这里并不重要:还将检查String
实例是否有null
与==
…
您需要将
Book
实例 b1
、b2
和 b3
添加到 Library
实例,并保留它们,Library
需要某种 Collection
作为成员,例如 private final List<Book> m_Books = new ArrayList<>()
,以及向其中添加书籍的方法,例如
public final void addBook( final Book book ) { m_Book.add( book ); }
当然你现在必须以不同的方式实施
findBook()
:
public final void findBook( final String title ) throws BookNotFoundException
{
for( final var book : m_Books )
{
if( title.equals( book.title ) )
{
System.out.println( "book found" );
return;
}
}
throw new BookNotFoundException( "book not found" );
}
但是这是您的用例的一个非常幼稚的实现,也缺乏任何类型的错误处理。
了解
Map
,实现equals()
和hashCode()
的要求,public
和private
对于封装意味着什么……