错失良机!因为Try-Catch没搞清,Java面试失败了…

开发 前端
今天,我们来聊一个比较轻松的话题。我的一位朋友前段时间在面试中被面试官“教育”了一番。原因是他在准备面试时,花了很多时间准备一些相对复杂的系统面试题和原理性问题。

错失良机!因为try-catch没搞清,Java面试失败了…

今天,我们来聊一个比较轻松的话题。我的一位朋友前段时间在面试中被面试官“教育”了一番。原因是他在准备面试时,花了很多时间准备一些相对复杂的系统面试题和原理性问题。结果,面试官却突然抛出一个简单的问题:

*try-catch 应该写在 for 循环的内部还是外部?请说明理由。*

朋友当时没反应过来这个问题的意图,随口答道他习惯放在 for 循环外面,因为这样看起来更美观。

可惜,这个回答给面试官留下了不好的印象,也为后续的面试失败埋下了伏笔…😔

其实,这个问题的答案并不是简单地选择总是放在里面或外面就好,而是要结合具体使用场景来回答。

使用场景

因为当发生异常时,将 try-catch 放在循环外部或内部会产生不同的效果。

所以要结合具体的业务场景来考虑。

① try-catch 放在 for 循环外部

代码示例:

publicstaticvoidoutside(){
try{
for(int count = 1; count <= 4; count++){
if(count == 3){
// 有意制造异常
int num = count / 0;
}else{
System.out.println("成功,count:" + count);
}
}
}catch(Exception e){
System.out.println("发生异常。");
}
}

输出结果:

成功,count:1
成功,count:2
发生异常。

显然,当 try-catch 放在 for 循环外部时,如果循环中发生异常,for 循环将被终止。

② try-catch 放在 for 循环内部

代码示例:

publicstaticvoidtryInside(){

for(int count = 1; count <= 4; count++){
try{
if(count == 3){
// 有意制造异常
int num = count / 0;
}else{
System.out.println("成功,count:" + count);
}
}catch(Exception e){
System.out.println("发生异常。");
}
}
}

输出结果:

成功,count:1
成功,count:2
发生异常。
成功,count:4

当 try-catch 在 for 循环内部时,循环中发生异常后会被 catch 捕获,不影响 for 循环的继续。

如果在面试中,以上这些放内外的使用效果都没答对,那真的可以等着“通知”了。

接下来,我们来谈谈性能上的差异。

性能

在时间上,其实并没有差异。

在内存使用方面,如果没有发生异常,同样也没有差异。

但如果发生异常,那就需要注意了。

需要注意什么?看下面的代码:

publicclassTryCatchDemo{

publicstaticvoidmain(String[] args){
Runtime runtime = Runtime.getRuntime();
long startMemory = runtime.totalMemory() - runtime.freeMemory();
for(int i = 0; i < 100000; i++){
try{
if(i > 2){
// 如果这一批数据有问题,所有情况都异常
// 这意味着会抛出近10万次异常
int num = i / 0;
}else{
System.out.println("成功,i:" + i);
}
}catch(Exception e){
System.out.println("发生异常。");
}
}
long endMemory = runtime.totalMemory() - runtime.freeMemory();
long memoryUsed = endMemory - startMemory;
System.out.println("memoryUsed: " + memoryUsed + " 字节");
}
}

输出结果:

图片

可以看到,当 try-catch 放在 for 循环内部时,由于异常不会终止 for 循环,如果确实存在大量业务处理过程中都会出现异常的场景,那么短时间内会消耗大量内存。

如果代码错误情况不多,则 try-catch 放在循环内部和外部的差异几乎不大。

最后,面试准备千万不要忽略基础知识。只有打好基础,才能从容应对更复杂、更深奥的问题。

结论

这个问题表面上考察的是代码结构和美观性,但深层次上反映了候选人对异常处理机制的理解。try-catch 放在循环的内外部,会直接影响程序的健壮性和内存效率。比如,对于业务需求要求不中断执行的情况,try-catch 在循环内部更为合适;而如果程序对异常的要求更严格,try-catch 在循环外部则更能保证代码的整体执行流程。通过这道题,我们可以看出异常处理不仅是错误的控制,更关系到系统的稳定性与资源优化。因此,在准备面试时,切勿忽视基础概念的理解和应用;只有打好基础,才能从容应对更复杂的问题。一个扎实的基础不但能帮助候选人更好地解决实际问题,还能让他们在关键时刻具备应对和解释的自信与从容。

责任编辑:武晓燕 来源: 路条编程
相关推荐

2012-02-13 13:53:17

酒店业移动互联

2009-09-23 09:58:54

XP.com域名微软

2024-05-24 08:59:15

2024-06-25 10:37:11

2024-11-04 08:20:00

try-catch编程

2009-07-21 14:30:38

Scalatry-catch

2022-01-25 12:14:39

面试try-catch代码

2020-10-14 12:10:22

Javatry-catch代码

2024-05-07 07:58:47

C#程序类型

2020-06-15 08:12:51

try catch代码处理器

2017-11-02 15:26:10

JavaScriptasync错误

2020-05-29 08:14:49

代码Try-Catch程序员

2023-08-14 16:13:08

数字化转型数据中台

2020-06-28 09:08:08

Java语法块开发

2024-10-09 08:48:52

2024-11-13 01:00:18

asyncawait​编程

2018-03-27 11:01:31

区块链技术商业

2021-11-23 13:34:10

加密货币金融货币

2020-08-24 13:35:59

trycatchJava

2024-07-12 16:31:16

点赞
收藏

51CTO技术栈公众号