Java 我应该何时使用抛出异常?
我什么时候应该在程序中使用“抛出异常”?我有时会在这些类中看到这一点:InputStreamReader,BufferedReader类。但我在FileReader和FileWriter类中看不到这一点。我在FileInputStream和FileOutputStream中也看到了这一点。 当我不使用它时,代码中会显示错误。为什么需要它? 这让我弄不清楚什么时候使用它以及应该使用哪种情况。我对java编程不熟悉 此处使用:Java 我应该何时使用抛出异常?,java,Java,我什么时候应该在程序中使用“抛出异常”?我有时会在这些类中看到这一点:InputStreamReader,BufferedReader类。但我在FileReader和FileWriter类中看不到这一点。我在FileInputStream和FileOutputStream中也看到了这一点。 当我不使用它时,代码中会显示错误。为什么需要它? 这让我弄不清楚什么时候使用它以及应该使用哪种情况。我对java编程不熟悉 此处使用: import java.io.*; class C{ publ
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");
}
}
您可以在以下情况下使用它:
- 您已经创建了一个自定义异常,并希望根据特定条件抛出它
- 您太懒了,无法处理异常并希望将其传递给其他人
- 您已经创建了一个自定义异常,并希望根据特定条件抛出它
- 您太懒了,无法处理异常并希望将其传递给其他人
但是人们应该尽量使用try-catch块来处理它们。当存在可以在函数外部抛出异常的代码路径时,需要在方法的
throws
子句中声明选中的异常
当有try
/catch
块时,异常会留在函数中,因此不需要使用throws
子句
另一方面,在第一个示例中,您没有try
/catch
,因此有一个代码路径在函数外部抛出IOException
,一个选中的异常。这就是抛出子句的必要性
注意:您应该使用带有特定异常类型的throws
子句,描述您的方法可以抛出的异常。使用抛出异常
不是一个好主意,因为它使所有调用方捕获所有类型的异常,从而破坏了首先声明抛出异常的目的,即使您的方法永远不会抛出异常。当存在可以在函数外部抛出异常的代码路径时,您需要在方法的throws
子句中声明选中的异常
当有try
/catch
块时,异常会留在函数中,因此不需要使用throws
子句
另一方面,在第一个示例中,您没有try
/catch
,因此有一个代码路径在函数外部抛出IOException
,一个选中的异常。这就是抛出子句的必要性
注意:您应该使用带有特定异常类型的throws
子句,描述您的方法可以抛出的异常。使用抛出异常
不是一个好主意,因为它会使所有调用方捕获所有类型的异常,从而破坏了首先声明抛出异常的目的,即使您的方法永远不会抛出异常。TL;DR:您应该永远不要使用抛出异常
声明您的方法抛出某种类型的异常
几乎是无用的。它还迫使人们更加不愉快:
try {
//stuff
} catch(Exception e) {
//what now?
}
你如何处理“某种未知类型的错误”
因此,您的方法应该读取抛出IOException
——这表示您的方法可能会遇到IO问题
这会告诉调用者他们可能必须处理IO问题,然后调用者可以:
- 要求用户选择另一个文件
- 选择一个默认文件
- 退出时出错
但这取决于打电话的人
因此,您应该使用“”,即系统应在遇到错误时立即抛出异常。你应该不断地重复,直到你到达一个可以有效处理错误的地方
例如:
用户选择一个文件
处理程序被触发
处理程序调用一些文件加载API
API读取该文件
错误
唯一可以处理异常的有用位置是1.,因为在这里可以要求用户选择不同的文件。在任何其他情况下,都不可能采取有用的行动。TL;DR:您应该永远不要使用抛出异常
声明您的方法抛出某种类型的异常
几乎是无用的。它还迫使人们更加不愉快:
try {
//stuff
} catch(Exception e) {
//what now?
}
你如何处理“某种未知类型的错误”
因此,您的方法应该读取抛出IOException
——这表示您的方法可能会遇到IO问题
这会告诉调用者他们可能必须处理IO问题,然后调用者可以:
- 要求用户选择另一个文件
- 选择一个默认文件
- 退出时出错
但这取决于打电话的人
因此,您应该使用“”,即系统应在遇到错误时立即抛出异常。你应该不断地重复,直到你到达一个可以有效处理错误的地方
例如:
用户选择一个文件
处理程序被触发
处理程序调用一些文件加载API
API读取该文件
错误
唯一可以处理异常的有用位置是1.,因为在这里可以要求用户选择不同的文件。在任何其他情况下,都不可能采取有用的操作。您不应该使用抛出异常。您应该抛出
并仅处理**特定的`异常。正是使用了抛出异常
,才导致选中的ex无效