Java 我应该何时使用抛出异常?

Java 我应该何时使用抛出异常?,java,Java,我什么时候应该在程序中使用“抛出异常”?我有时会在这些类中看到这一点:InputStreamReader,BufferedReader类。但我在FileReader和FileWriter类中看不到这一点。我在FileInputStream和FileOutputStream中也看到了这一点。 当我不使用它时,代码中会显示错误。为什么需要它? 这让我弄不清楚什么时候使用它以及应该使用哪种情况。我对java编程不熟悉 此处使用: import java.io.*; class C{ publ

我什么时候应该在程序中使用“抛出异常”?我有时会在这些类中看到这一点:InputStreamReaderBufferedReader类。但我在FileReaderFileWriter类中看不到这一点。我在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");  
 }  
}  
您可以在以下情况下使用它:

  • 您已经创建了一个自定义异常,并希望根据特定条件抛出它
  • 您太懒了,无法处理异常并希望将其传递给其他人
但是人们应该尽量使用try-catch块来处理它们。

您可以在以下情况下使用它:

  • 您已经创建了一个自定义异常,并希望根据特定条件抛出它
  • 您太懒了,无法处理异常并希望将其传递给其他人

但是人们应该尽量使用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无效