java – 正确尝试catch设计

这将被认为是在
Java中实现try / catch的更合适的技术:

A:

Date lastMod = null;
BufferedReader inFile = null;
    try {
        inFile = new BufferedReader(new FileReader("C:\\Java\\settings.ini"));
        try {
            lastMod = new Date(Long.parseLong(inFile.readLine()));
        } catch (IOException e) {
            e.printStackTrace();
        }
    } catch(FileNotFoundException e) {
        e.printStackTrace();
    }

或B:

Date lastMod = null;
BufferedReader inFile = null;
    try {
        inFile = new BufferedReader(new FileReader("C:\\Java\\settings.ini"));
        lastMod = new Date(Long.parseLong(inFile.readLine()));
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

另外,使用BufferedReader的长代码块来跟随try / catch块是错误的,还是首选在try / catch中包含长代码块?

例如:

public static void main(String[] args) {
    Date lastMod = null;
    BufferedReader inFile = null;
    try {
        inFile = new BufferedReader(new FileReader("C:\\Java\\settings.ini"));
        lastMod = new Date(Long.parseLong(inFile.readLine()));
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    //Long block of code using inFile
    inFile.readLine();
    inFile.close();

与:

public static void main(String[] args) {
    Date lastMod = null;
    BufferedReader inFile = null;
    try {
        inFile = new BufferedReader(new FileReader("C:\\Java\\settings.ini"));
        lastMod = new Date(Long.parseLong(inFile.readLine()));
        //Long block of code using inFile
        inFile.readLine();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        inFile.close();
    }

最佳答案 当外部try块之前内部try块之后没有任何内容发生时,B更具可读性.如果你有逻辑在两者之间执行,那么你必须使用A.

在第二个例子中,使用finally的第二个版本对于确保无论如何都会调用close是至关重要的(即使函数首先返回)没有最终的第一个版本实际上是错误的,因为你可能会用完所有文件句柄而无法使用打开更多文件.

作为附加说明,您可能需要在调用close时检查null.如果你使用的是java 7,那么使用“try with resources”会更好.

点赞