需要捕获异常和异常
The need to catch IOExceptions & Exceptions
如果使用扫描仪对象读取 txt 文件的程序只产生 FileNotFoundException,是否应该始终捕获 IOException/Exception?
这样的额外代码是不需要的还是重要的?
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class TestingScanner {
public TestingScanner() {
readFile("dummy.txt");
}
public void readFile(String filePath) {
File file = new File(filePath);
Scanner scanner = null;
try {
scanner = new Scanner(file);
while (scanner.hasNext()) {
String line = scanner.nextLine();
if (line.matches("^.+@yahoo\.com?(\.uk)?$"))
System.out.println(line);
}
} catch (FileNotFoundException e) {
System.out.println("ERROR: Couldn't Load in " + filePath);
e.printStackTrace();
} finally {
if (scanner != null)
scanner.close();
}
}
}
是的,我们必须始终捕获 IO 异常。由于IO与读写文件有关,所以总是有可能由于各种原因(输入路径错误,资源不可用,网络故障)而失败。
捕获到异常后,我们应该始终记录异常。
在大型项目中,这些 异常日志有助于确定某些功能故障的实际原因。
您可以改用 throws Exception
,但建议您使用 try/catch,因为您可以告诉您的程序在出错时该怎么做。是的,如果出现错误,有必要有例外。
我的经验法则是广泛使用异常捕获(捕获异常或可抛出),除非有特定的事情我想针对特定的异常做不同的事情。
例如,如果一个方法抛出两个不同的异常,而我将同时处理这两个异常,那么我将只捕获异常。但是如果我以不同的方式处理它们,那么我会单独捕获每个并相应地处理它们。
这种方法的关键是 "what about RuntimeExceptions"。一种思想流派是允许 RuntimeExceptions 冒泡。但我发现,在我捕获异常的情况下,我想要所有异常......有时甚至是 Throwables(我曾因为只捕获异常而不是 Throwable 而被烧毁)。
这里有一些例子:
public void myMethod() throws IOException, FileNotFoundException ();
在我不想让异常冒泡的情况下(需要处理所有异常)
try{
myMethod();
catch(Exception e) {
//handle it
}
在我捕获异常并需要为 FileNotFound 做一些不同的事情的情况下。
try{
myMethod();
catch(FileNotFoundException fe){
//handle file not found
}
catch(Exception e) {
//handle it
}
在我让异常冒泡的情况下,因为我知道链的更上层一些非常酷的异常处理代码正在处理它,我想避免多次记录异常:
myMethod();
在我让异常冒泡的情况下,FileNotFound 除外。
try{
myMethod();
catch(FileNotFoundException fe){
//handle file not found
}
如果使用扫描仪对象读取 txt 文件的程序只产生 FileNotFoundException,是否应该始终捕获 IOException/Exception?
这样的额外代码是不需要的还是重要的?
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class TestingScanner {
public TestingScanner() {
readFile("dummy.txt");
}
public void readFile(String filePath) {
File file = new File(filePath);
Scanner scanner = null;
try {
scanner = new Scanner(file);
while (scanner.hasNext()) {
String line = scanner.nextLine();
if (line.matches("^.+@yahoo\.com?(\.uk)?$"))
System.out.println(line);
}
} catch (FileNotFoundException e) {
System.out.println("ERROR: Couldn't Load in " + filePath);
e.printStackTrace();
} finally {
if (scanner != null)
scanner.close();
}
}
}
是的,我们必须始终捕获 IO 异常。由于IO与读写文件有关,所以总是有可能由于各种原因(输入路径错误,资源不可用,网络故障)而失败。
捕获到异常后,我们应该始终记录异常。 在大型项目中,这些 异常日志有助于确定某些功能故障的实际原因。
您可以改用 throws Exception
,但建议您使用 try/catch,因为您可以告诉您的程序在出错时该怎么做。是的,如果出现错误,有必要有例外。
我的经验法则是广泛使用异常捕获(捕获异常或可抛出),除非有特定的事情我想针对特定的异常做不同的事情。
例如,如果一个方法抛出两个不同的异常,而我将同时处理这两个异常,那么我将只捕获异常。但是如果我以不同的方式处理它们,那么我会单独捕获每个并相应地处理它们。
这种方法的关键是 "what about RuntimeExceptions"。一种思想流派是允许 RuntimeExceptions 冒泡。但我发现,在我捕获异常的情况下,我想要所有异常......有时甚至是 Throwables(我曾因为只捕获异常而不是 Throwable 而被烧毁)。
这里有一些例子:
public void myMethod() throws IOException, FileNotFoundException ();
在我不想让异常冒泡的情况下(需要处理所有异常)
try{
myMethod();
catch(Exception e) {
//handle it
}
在我捕获异常并需要为 FileNotFound 做一些不同的事情的情况下。
try{
myMethod();
catch(FileNotFoundException fe){
//handle file not found
}
catch(Exception e) {
//handle it
}
在我让异常冒泡的情况下,因为我知道链的更上层一些非常酷的异常处理代码正在处理它,我想避免多次记录异常:
myMethod();
在我让异常冒泡的情况下,FileNotFound 除外。
try{
myMethod();
catch(FileNotFoundException fe){
//handle file not found
}