近期面试Android开发总结
来源:互联网 发布:调度数据网通信维护 编辑:程序博客网 时间:2024/05/16 02:49
根据近期面试的公司总结下面试问题,供大家参考
首先,面试前准备一定要充分,一定要重视基础知识。每天总结,每天更新自己的知识库
try......catch..............finally
1.为什么要用finally
先看一个没有finally的异常处理try-catch语句:
假设count为要使用到的资源,并且用完要求释放此资源。那么我们可以把释放资源的语句放到try-catch后执行,当前的程序不管是在执行完try语句块还是catch语句块,都会顺序执行到下面释放资源的语句。
int count = 0; //初始化资源
try{
count++;
if(count == 1) throw new Exception("Exception in try");
}catch(Exception e){
System.out.println("catch block");
}
count = 0; //释放资源
但是,如果在try或catch中有多条return语句,那么在每条return语句之前,都要先执行释放资源的语句:
public void f() throws Exception {
int count = 0; //初始化资源
try{
doSomething;
statementMayCauseException; //可能会抛出异常的语句,若异常没有被catch,则直接抛出,也不会执行到try-catch下面的语句
doSomething;
if(count == 1) throw new Exception1("E1 in try");
if(count == 2) throw new Exception2("E2 in try");
}catch(Exception1 e){
count = 0; //释放资源
throw e; //再次把异常抛出,让上一级捕获。此时将不会执行catch外的语句,所以要先释放资源
}catch(Exception2 e){
count = 0; //释放资源
return; //返回了,也不会执行catch外的语句,所以要先释放资源
}
count = 0; //释放资源
}
这样,就需要在每一个可能返回的地方,以及每一个可能出现异常而导致程序跳转的地方,考虑如何释放资源,导致复杂和冗余。
所以,需要finally语句。
把资源释放或状态还原的代码放到finally块中,可以保证在try和catch语句执行完后,一定会执行finally语句块,而不用考虑各种复杂的跳转情况。
int count = 0;
try{
count++;
if(count == 1)throw new Exception();
}catch(Exception e){
}finally{
count = 0;
}
2.finally什么时候执行
finally在return语句之后,跳转到上一级程序之前执行。
public class Test {
public static void main(String[] args) {
System.out .println(test ());
}
public static String test() {
try {
System.out .println("try block");
return test1 ();
} finally {
System.out .println("finally block");
//return "finally";
}
}
public static String test1() {
System.out .println("return statement");
return "after return";
}
}
结果:
try block
return statement
finally block
after return
分析:
1.try语句块,return test1(),则调用test1方法
2.test1()执行后返回"after return",返回值"afterreturn"保存在一个临时区域里
3.执行finally语句块。若finally语句有返回值,则此返回值将替换掉临时区域的返回值
4.将临时区域的返回值送到上一级方法中。
亲测是正确的:如果若finally语句有返回值,则此返回值将替换掉临时区域的返回值
参考:
《thinking in Java》
http://blog.csdn.net/mymyway/article/details/7954549
- 近期面试Android开发总结
- 近期Android面试经历总结
- 近期面试总结
- 近期面试总结
- 近期笔面试总结
- 近期笔面试问题总结
- 近期开发css总结
- 近期学习android总结
- Android近期学习总结
- Android 近期知识总结
- android开发:面试总结一
- android中级开发面试总结
- android开发面试问题总结
- 近期开发技术整理总结
- 近期面试经历总结及公司评价
- C++近期常见问题面试总结(一)
- 关于近期面试的一些总结
- 近期面试Android岗的一些想法
- .pdb后缀文件
- Pebble开发教程 - (0)写在前面
- 习题 2-2:韩信点兵
- 上传APP至AppStore时打包出现U option must have a non-empty value
- 使用SpringMVC4构建Restful服务
- 近期面试Android开发总结
- Java 对中文,英文排序,英文在后面(英文精确排序)
- 学习资料的收集
- 设计模式-适配器
- 浅谈过载保护
- svn启动命令----Linux
- MySQL在远程访问时非常慢的解决方法
- swift学习笔记(1)--基本数据类型
- WebP