2013-07-04 51 views
1

我有具有下面的代碼類:吸氣二傳手範圍

public class Crawler { 

    String title; 

    public void setTitle(String text) { 
     title=text; 
     //System.out.println(title); 
    } 

    public String getTitle() { 
     // System.out.println(title); 
     return title; 
    } 

    public void crawler() { 
     Document doc; 
     doc = connect("http://www.xyz.com//asd.html").timeout(0).get(); 
     title=doc.title(); 
     setTitle(title); 
     System.out.println("Title : " + title); 
    } 
} 

另一個類:

public class Results { 

    public void output() { 
     Crawler cw=new Crawler(); 
     System.out.println(cw.getTitle()); 
    } 
} 

的事情是,在結果類的SOP是印刷null

setTitle()中的註釋SOP正在打印所需的文本,但getTitle()中的SOP仍在說null

這裏有沒有範圍問題?我沒有得到它。當我調用setTitle()方法時,全局標題變量不會改變嗎?

對不起,我忘了提到這一點,我有低於該類調用在礦井以下方式方法:

EDIT 1:

public class OA { 
    public static void main(String[] args) 
    { 
     Crawler cw=new Crawler(); 
     //LoadIntoDB ld= new LoadIntoDB(); 
     Results op=new Results(); 

     cw.crawler(); 
     //ld.load(); 
     op.output(); 
    } 
} 

當運行OA類,履帶和結果類的方法被調用。我仍然得到空。

+1

「'Document doc; title = doc.title();'」可以編譯嗎? 'doc'未初始化。 – johnchen902

回答

1

這是因爲titlenull所以getTitle返回null。 您在另一個類中創建了Crawler的新對象,並且您現有的代碼未設置title

如果你想有一個標題爲自動設置,則需要保留這些代碼在構造函數中

public Crawler() { 
    //some code to get your document 
    title=doc.title(); 
    setTitle(title); 
} 
+0

我編輯了我的問題,有一個類OA調用方法。 – user2500875

5

的事情是,在結果類的SOP是印刷空

是的,會的。你永遠不會撥打crawler方法,這是唯一可以撥打setTitle的方法。也許你的意思是它是一個構造函數?如果是這樣,你需要申報從:

public void crawler() { 

要這樣:

public Crawler() { 
+0

我編輯了我的問題,有一個類OA調用方法。 – user2500875

+0

你能幫忙嗎? – user2500875

+0

@ user2500875:我們沒有足夠的信息來確定發生了什麼。你已經完全改變了這個問題。請提供一個簡短的*完整*程序來證明問題。 –

1

第一變化public void crawler()public Crawler() 第二件事


public void crawler() { 
    Document doc; 
    title=doc.title(); 
    setTitle(title); 
    System.out.println("Title : " + title); 
} 

分配DOC一些價值否則你將得到NullPointerException

+0

我編輯了我的問題,有一個類OA調用方法。 – user2500875

+0

現在您不需要將方法轉換爲構造函數,但仍然爲文檔分配一些值,否則doc.title()會拋出異常 –

+0

輸出仍然給我null。 – user2500875

2

您剛剛實例化了Crawler類。它有一個實例變量String title;。如果未特別指定,實例引用變量將默認爲null。您需要撥打setTitle()來設置title或否則getTitle()必將返回null

這裏重要的是crawler()不是Crawler類的構造函數。Java區分大小寫。

的問題進行修改後:

在其當前實現,cw.crawler()應該拋出NPE。只要看看的crawler()代碼:

public void crawler() { 
    Document doc; 
    title=doc.title(); // null pointer here , doc was never instantiated 
    setTitle(title); 
    System.out.println("Title : " + title); 
} 

問題被重新編輯後:

public static void main()方法,您要創建的Crawler一個實例,並調用其crawler()方法來設置它的title

Crawler cw=new Crawler(); 

但是,當你調用output()方法,您要創建的Crawler不同的對象,這是一個新的對象爲其titlenull

public void output() { 
    Crawler cw=new Crawler(); // new object 
    System.out.println(cw.getTitle()); 
} 
+0

我編輯了我的問題,有一個類OA調用方法。 – user2500875

+0

我再次編輯,該行被誤刪除。當我嘗試在getter方法中打印標題的值時,它仍然給我null。這是爲什麼?我認爲如果我在setter中設置title的值,那麼當我在getter中把它剔除時,它會打印出正確的值? – user2500875

+0

哦,是啊! TY,但即使我擴展它仍然null.Y是,如果我試圖打印的「標題」的價值在getter方法本身即時變得空?但在setter方法中,它給了我正確的o/p – user2500875

0

在這裏,如果你使用public void crawler() {作爲構造則只需將其更改爲public crawler(){ }

+0

我編輯了我的問題,有一個類OA調用方法。 – user2500875