Java try catch finally 怎么用

你有没有遇到过这种情况:写代码时明明顺顺利利,运行后却突然弹出“程序出错”的提示,比如你写了一段从文件读取用户信息的代码,文件却不小心被删掉了,程序直接崩了,连该给用户的提示都没发出去。这时候,try catch finally 就派上用场了。

简单说,它就是代码里的“安全缓冲带”和“善后小助手”,能帮你接住意外,还能处理收尾的事,让程序更稳。

Java try catch finally 怎么用

先搞懂最核心的三个部分

你可以把 try 想象成“敢闯的试错者”:把可能出错的代码放进 try 块里,它会先试着跑一遍,如果一切顺利,就跳过后面的 catch;要是跑的时候出了问题,比如刚才的文件读不到,它就立刻停下,把错误信息打包扔给 catch。

catch 就是“补锅的消防员”:它专门接住 try 扔过来的错误,然后处理。比如文件读不到,catch 里就写“告诉用户‘文件丢失,请重新上传’”,这样程序就不会直接崩,用户也能得到明确提示。

finally 是“不管怎样都要做的收尾员”:不管 try 顺利跑完,还是 catch 接住了错误,finally 里的代码都会执行。最常见的用法就是关资源,比如你打开了文件、连了数据库,不管刚才有没有出错,finally 里都要把它们关掉,不然会占着资源,下次再用可能出问题。

举个生活化的例子:你去奶茶店买奶茶,点单后(对应 try 里的操作),店员说“这款奶茶卖完了”(对应 catch 接住的错误),你本来会很生气,但店员给你换了等价的另一款(对应 catch 处理错误);不管最后你拿到的是原定的奶茶,还是换的那杯,你都会把钱付了(对应 finally 里关资源的操作)——这就是 try catch finally 的逻辑。

怎么用才不会踩坑?

很多新手会乱用这三个部分,反而让代码更乱,记住这三个小技巧就够了。

首先,不要把所有代码都塞进 try:try 是用来放“可能出错的代码”,不是放所有代码。比如你写计算 1+1 这种肯定不会错的代码,就不用放 try 里,不然代码会显得冗余。比如你要读文件,就把“打开文件、读取内容”这两步放 try,而“计算读取的内容长度”这种肯定不会错的,就放外面。

其次,catch 要精准,别啥都接:Java 里有很多种错误,比如文件找不到是 IOException,数字转错是 NumberFormatException,别图省事直接写 catch (Exception e) 接住所有错误。比如你读文件出错,就写 catch (IOException e),这样能针对不同错误做不同处理,比如读文件错了提示用户,数字转错了提示“输入格式不对”,程序的提示会更贴心。

最后,finally 里别放会出错的代码:finally 是必须执行的,要是里面的代码出错了,程序会直接跳过前面的错误处理,导致资源没关。比如你在 finally 里关文件时,文件已经被删了,这时候就会报错,所以 finally 里的代码要尽量简单,只做“安全的收尾”,比如关文件前先判断文件是否已经打开。

一个完整的小例子

假设你要写一段代码,让用户输入一个文件名,读取里面的内容并显示,出错时要提示用户,不管怎样都要关闭文件。代码大概是这样的:

首先定义一个文件对象,然后打开文件,读取内容:

File file = new File("user_info.txt");

FileReader reader = null;

try {

reader = new FileReader(file);

char[] buffer = new char[1024];

int len = reader.read(buffer);

System.out.println("文件内容:" + new String(buffer, 0, len));

} catch (IOException e) {

System.out.println("读取文件出错:" + e.getMessage());

} finally {

try {

if (reader != null) reader.close();

} catch (IOException e) {

System.out.println("关闭文件失败");

}

}

你看,这里的 try 放了打开文件、读文件的可能出错操作,catch 处理读文件失败的情况,finally 不管怎样都关闭文件,还加了判断 reader 是不是空的,避免关空的对象出错,这就是正确的用法。

其实 try catch finally 不难,核心就是给可能出错的代码加缓冲,给错误加处理,给收尾加保障,用多了就能熟练掌握。

上一篇 JavaScript 数组扁平化怎么写