2015-12-06 198 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

謝謝我看到我做錯了什麼 –

相關問題