我应该何时在我的程序中使用 “抛出异常” ?我会在某些时候看到这些类: InputStreamReader , BufferedReader 类。但我没有看到 FileReader 和 FileWriter < / em> 类。我看到 FileInputStream 和 FileOutputStream。 当我不使用它时,在代码中显示错误。为什么需要它? 这让我很困惑何时使用它以及我应该使用哪种情况。我是java编程的新手。
在此使用:
import java.io.*;
class C{
public static void main(String args[])throws Exception{
FileInputStream fin=new FileInputStream("hlw.java");
FileOutputStream fout=new FileOutputStream("M.java");
int i=0;
while((i=fin.read())!=-1){
fout.write((byte)i);
}
fin.close();
fout.close();
}
}
此处未使用
import java.io.*;
class Simple{
public static void main(String args[]){
try{
FileWriter fw=new FileWriter("abc.txt");
fw.write("my name is sachin");
fw.close();
}catch(Exception e){System.out.println(e);}
System.out.println("success");
}
}
答案 0 :(得分:4)
当存在代码路径时,您需要在方法的throws
子句中声明已检查的异常,可以从 函数中抛出异常。
当存在try
/ catch
块时,异常会保留在您的函数中,因此不需要使用throws
子句。
另一方面,在您的第一个示例中,您没有try
/ catch
,因此有一个代码路径会抛出IOException
,一个已检查的异常,在功能。这就是使throws
条款成为必要的原因。
注意:您应该将throws
子句与特定的异常类型一起使用,描述您的方法可以抛出的异常。使用throws Exception
并不是一个好主意,因为它通过让所有调用者捕获所有类型的异常来破坏首先声明抛出异常的目的,即使你的方法永远不会抛出它们。
答案 1 :(得分:1)
你应该可以在以下时间使用它:
但是应该主要尝试使用try-catch块来处理它们。
答案 2 :(得分:0)
throws Exception
声明您的方法抛出某种的Exception
旁边是无用的。它也迫使更加不愉快:
try {
//stuff
} catch(Exception e) {
//what now?
}
你如何处理“某种未知类型的错误”?
因此,您的方法应该是throws IOException
- 这表示您的方法可能会遇到IO问题。
这告诉调用者他们可能必须处理存在IO问题的情况,然后此调用者可以:
但这取决于来电者。
所以你应该“throw early, catch late”,即系统在遇到错误时应该立即抛出异常。并且你应该继续重新抛出,直到你最终可以有效地处理错误。
举个例子:
可以处理异常的唯一有用位置是1.,因为这里可以要求用户选择不同的文件。在任何其他方面,都不太可能采取有用的行动。