2015-12-06 194 views
0

我的程序中有一个问题,我的程序中允许一个Student类1本书,它必须存储在一个变量_book中,但我似乎无法找到一种方法来检查如果一个对象已经被实例化或没有得到运行时错误。检查一个对象是否已经在Java中实例化

我试图

  1. 比较变量为null
  2. 访问来检查,如果变量为空
  3. 访问来检查,如果变量是0
  4. 可变内的函数的变量内的功能

Simplified Code:

研究生班

public class Student { 
    private String _name; 
    private Library _collegeLibrary; 
    private LibraryCard _card; 
    private TextBook _book; 

    public Student(String name, Library library) { 
     _name = name; 
     _collegeLibrary = library; 
     System.out.println("[Student] Name: " + _name); 
    } 

    public void describe() { 
     String message; 
     message = "[Student] " + _name; 
     if (_book.returnTitle() == null) // returns java.lang.NullPointerException 
      message += " does not have a book"; 
     else { 
      message += " is borrowing the book \"" + _book.returnTitle() + "\""; 
     } 
     System.out.println(message); 
    } 
} 

教材类

public class TextBook { 
    String _title; 

    public TextBook(String title) { 
     _title = title; 
    } 

    public String returnTitle() { 
     return _title; 
    } 
} 

上面的代码将会给我一个java.lang.NullPointerException。我研究了捕获错误,但它似乎并不是建议的。

+2

对不起,但它的绝对不可能的,所示的代码将给出一个NullPointerException。 –

+0

@ClausBönnhoff为什么呢? –

+0

我假设你的真实代码中的if语句之后有一个左括号? – Raven

回答

1

您检查是否_book.returnTitle()null,但是,这并不需要在账户_book被空。您可以检查是否_book为空。这应该解决您的空指针异常。

此外,你应该总是把你的if-else子句放在大括号中。这样就更容易阅读。

更改代码的这一部分:

if (_book.returnTitle() == null) // returns java.lang.NullPointerException 
     message += " does not have a book"; 
    else { 
     message += " is borrowing the book \"" + _book.returnTitle() + "\""; 
    } 

要这样:

if (_book == null) { // returns java.lang.NullPointerException 
     message += " does not have a book"; 
    } else { 
     message += " is borrowing the book \"" + _book.returnTitle() + "\""; 
    } 

此外,作为小费,你可以重写toString功能做你describe功能究竟是干什么的:

@Override 
    public String toString() { 
     String message; 
     message = "[Student] " + _name; 
     if (_book == null) { // returns java.lang.NullPointerException 
      message += " does not have a book"; 
     } else { 
      message += " is borrowing the book \"" + _book.returnTitle() + "\""; 
     } 
     return message; 
    } 

用法:

public class SomeClass { 
    public static void main(String[] args) { 
     Student student = new Student("Student", new Library()); 
     System.out.println(student); //Because you override #toString() you can just println the Student object. 
    } 
} 
+0

谢谢我看到我做错了什么 –

相关问题