effective java第二章 methods common to all objects

9、使用 try-with-resources 语句替代 try-finally 语句

正常情况下使用关闭资源

// try-finally - No longer the best way to close resources!
static String firstLineOfFile(String path) throws IOException {
     
    BufferedReader br = new BufferedReader(new FileReader(path));
    try {
     
        return br.readLine();
    } finally {
     
        br.close();
    }
}

添加第二个资源后代码变为

// try-finally is ugly when used with more than one resource!
static void copy(String src, String dst) throws IOException {
     
    InputStream in = new FileInputStream(src);
    try {
     
        OutputStream out = new FileOutputStream(dst);
        try {
     
            byte[] buf = new byte[BUFFER_SIZE];
            int n;
            while ((n = in.read(buf)) >= 0)
                out.write(buf, 0, n);
        } finally {
     
            out.close();
        }
    } finally {
     
        in.close();
    }
}

代码变得复杂且容易出错

使用try-with-resources后

// try-with-resources - the the best way to close resources!
static String firstLineOfFile(String path) throws IOException {
     
    try (BufferedReader br = new BufferedReader(
           new FileReader(path))) {
     
       return br.readLine();
    }
}


// try-with-resources on multiple resources - short and sweet
static void copy(String src, String dst) throws IOException {
     
    try (InputStream   in = new FileInputStream(src);
         OutputStream out = new FileOutputStream(dst)) {
     
        byte[] buf = new byte[BUFFER_SIZE];
        int n;
        while ((n = in.read(buf)) >= 0)
            out.write(buf, 0, n);
    }
}

try中的异常会将finally中的异常抑制
可以在 try-with-resources 语句中添加 catch 子句

// try-with-resources with a catch clause
static String firstLineOfFile(String path, String defaultVal) {
     
    try (BufferedReader br = new BufferedReader(
           new FileReader(path))) {
     
        return br.readLine();
    } catch (IOException e) {
     
        return defaultVal;
    }
}

10、重写 equals 方法时遵守通用约定

你可能感兴趣的:(effective java第二章 methods common to all objects)