首页 > 编程知识 正文

java前端面试题及答案,java基础知识面试题

时间:2023-05-06 03:49:44 阅读:114736 作者:1751

在Java面试中,出现关于finally的面试问题的概率非常高,而且如果被面试官问到,就不会翻筋斗,而是会接二连三地提出“连环提问”。 而且,回答这一系列问题常常需要代码的辅助,可以说是考验基础的面试的有利问题。 面试官会问什么呢? 应试者应该如何完美地回答呢? 今天主编带着猴子们体验finally面试,希望对你有帮助。

假设发生3360异常后,不执行异常后的代码,而是在catch块中执行,但要理解catch后的代码是执行的。 简单示例3360

公共静态测试() try ) intI=1/0;

系统. out.println (error open ); //上面发生了异常,所以我永远不去这里

返回'1';

}catch(arithmeticexceptione ) )

系统. out.println (error );

}

system.out.println (try . catch . finish ); 返回'完成';

}

结果:

错误发生器

try . catch . finish

面试官的主题

什么时候用finally? finally语句是否在try或catch return语句执行后或return返回前执行?

考点分析

这个主题也与异常相关。 对于这个主题,我们用代码验证我们的答案。 因为有异议的知识点,所以代码最有说服力。 关于编程,希望你记住“不要和人争,一切都用代码说”。

回答

什么时候用finally?

有些需要在异常处理后恢复到原始状态,如打开的文件、网络连接等。

finally语句是否在try或catch return语句执行后或return返回前执行?

这个问题是非常经典的问题,经常被面试官问。 如果不亲自实验的话,可能会判断错误。 让我们结合代码进行分析。

以下,用4个demo得出最终结论。

1

私密静态int test1 (

int i=1;

try {

system.out.println('try . ';

返回I=10;

}catch(exceptione ) {

system.out.println('catch . ';

} finally {

I;

system.out.println('finally . ';

system.out.println(I=) I;

}

返回I;

}

执行结果:

特里.

金融.

i=12

test1:11

总结: finally代码块在try代码块中的return语句执行后返回执行。

2

私密静态int test2(

int i=1;

try {

system.out.println('try . ';

返回I=10;

}catch(exceptione ) {

system.out.println('catch . ';

} finally {

I;

system.out.println('finally . ';

system.out.println(I=) I;

返回I;

}

}

执行结果:

test2:12

特里.

金融.

i=12

总结: finally代码块中的return语句将复盖try代码块中的return语句。

3

私有静态地图测试3 (

Map map=new HashMap (;

map.put(key,) INIT );

try {

system.out.println('try . ';

map.put(key,) TRY );

返回图;

}catch(exceptione ) {

system.out.println('catch . ';

map.put(key,) CATCH );

} finally {

system.out.println('finally . ';

map.put(key,) FINALLY );

映射=null;

}

返回图;

}

执行结果:

特里.

金融

金融.

总结:如果return语句未复盖finally语句中的返回值,则原始返回值可能会通过在finally中的修改而更改,也可能不会更改。 值类型返回值:不变; 传输目标类型的返回值:变化。

在这里引入新问题,如何判断变量是传递值还是传递地址? 传值: 8种基本数据类型及其包装类、文字常数。 地址:数组和对象。

4

私密静态int test4(

int i=1;

try {

system.out.println('try . ';

i=i/0;

返回I=10;

}catch(exceptione ) {

system.out.println('catch . ';

返回I;

} finally {

I;

system.out.println('finally . ';

system.out.println(I=) I;

}

}

执行结果:

特里.

广告宣传.

金融.

i=2

1

总结: try代码块中的return语句不在异常情况下执行,具体返回哪一个进行观察; catch上的返回执行情况与未发生异常时try上的返回执行情况完全相同。

情况:

私密int test5() {int i=1; try{

system.out.println('try . ';

i=i/0; 返回I=10;

}catch(exceptione ) {

system.out.println('catch . '; returni;

}finally{

I;

system.out.println('finally . ';

system.out.println(I=) I; returni;

}

}

特里.

广告宣传.

金融.

i=2

2

将:finally代码块中的return语句放在一起,以复盖try代码块中的return语句。

总结一下

根据以上分析,总结一下答案吧:

不执行try语句。 如果在try语句之前返回,则不执行finally语句。 因此,finally语句需要执行而不是充分条件表明相应的try语句必须执行。

在try代码块中执行system.exit(0)语句时; 由于Java虚拟机JVM将退出,因此finally语句也不会在中执行。

finally块语句在执行try或catch return语句后、返回值前执行。 此外,finally修改语句可以影响也可以不影响try或catch返回中已经确定的返回值。 如果返回类型为寻址类型,则会产生影响。 传递值类型不会产生影响。 如果finally也有return语句,则重写try或catch return语句并直接返回。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。