我有這個奇怪的行爲與try catch塊。當我初始化它裏面的變量他們似乎是超出範圍的,即使我之外聲明它們下面的代碼..嘗試捕獲塊變量超出範圍
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class CopyFile {
public static void main(String[] args) {
FileInputStream fis;
FileOutputStream fos;
args[0] = "somefile.txt";
args[1] = "copyithere.txt";
int i;
try {
try {
fis = new FileInputStream(args[0]);
} catch (FileNotFoundException e) {
System.out.println("Input file not found");
e.getMessage();
}
try {
fos = new FileOutputStream(args[1]);
} catch (FileNotFoundException e) {
System.out.println("Output file not found");
e.printStackTrace();
}
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("Give input and output file name");
e.getStackTrace();
}
try {
do {
i = fis.read();
fos.write(i);
} while (i != -1);
} catch (IOException e) {
System.out.println("Some IO exception");
e.getMessage();
}
}
}
奇怪的是,當我宣佈變量設置爲null「的FileInputStream FIS = NULL;然後這一切都變好了..不是沒有初始化相當於初始化爲空的聲明..? 擺脫「範圍錯誤」的另一種方式是當我把「返回;」在catch塊的末尾..不應該代碼運行良好嗎?我可以看到這可能會導致錯誤,但它如何與「fis和fio的範圍外錯誤」相關聯?
確定我看到..感謝..所以在這種情況下,當我把delarations出來的該方法,並使其靜態它也可以工作..你知道這個區別是什麼原因嗎? – Tummomoxie
更新了答案,你可以看看 – developer
你總是需要初始化你的局部變量 – developer