2015-05-03 102 views
-1

,我得到了以下錯誤:變量OBJ可能在試圖行使尚未初始化

variable obj might not have been initialized

代碼:

import java.io.*; 

public class Ex7 { 

public static NationalMessage nationalMessage(String fName){ 
    NationalMessage obj; 
    try{ 
     BufferedReader scan = new BufferedReader(new FileReader(fName)); 
     String currentline = scan.readLine(); 

     while(currentline != null){ 
      String[] lines = currentline.split(" "); 

      if(lines[0].startsWith("UK") & lines[1].startsWith("UK")){ 
       obj = new NationalMessage(lines[0], lines[1], lines[2]); 
       scan.close(); 
       break; 
      } 
     } 

     return obj; 
    } 

    catch(IOException e){ 
     System.out.println("IO Error"); 
     return null; 
    } 
} 
} 

首先,我知道爲什麼我收到此錯誤,但我無法找到解決它的方法,而不必在try塊中放置另一個return語句。如果發生異常錯誤,我只希望它返回null。我能想到的唯一解決方案是放置「return obj」;在if語句的結尾處,但它會說有一個缺失的return語句。另外,如果我在第4行初始化obj,那麼它不會用它需要的參數構造NationalMessage類(就像它在IF語句中那樣)。

所以它不是一個bullsh * t問題,或者我顯然在這裏做錯了什麼。

+5

NationalMessage obj = null; – ben75

+0

如果文件爲空,該怎麼辦?在這種情況下,執行流程不會進入while循環,並且永遠不會分配obj。類似的,如果沒有以「UK」開頭的行。在這些情況下你想要返回什麼? – isnot2bad

回答

1

本地變量在返回之前需要在使用之前初始化。雖然你與初始化,但就是下如果阻止

obj = new NationalMessage(lines[0], lines[1], lines[2]); 

編譯器不知道它是否會在實際運行時初始化或不是因爲它的條件。所以初始化它與

NationalMessage obj =null; 

也試着把它取出,如果塊,它會幫助你理解。

+0

@M Sach,這僅適用於非靜態方法。 –

+1

@SaurabhJhunjhunwala多數民衆贊成在所有方法 –

+0

@MSach上帝保佑 –