近期面试Android开发总结
2015-10-28 14:02
423 查看
根据近期面试的公司总结下面试问题,供大家参考
首先,面试前准备一定要充分,一定要重视基础知识。每天总结,每天更新自己的知识库
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
首先,面试前准备一定要充分,一定要重视基础知识。每天总结,每天更新自己的知识库
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
相关文章推荐
- 怎么给win7电脑桌面文件夹加密-兄弟连IT教育
- 翻译随笔(1)——职场成功不仅需要技术高超
- Android开发工程师必看面试题:(三)
- Android开发工程师必看面试题:(二)
- Android开发工程师必看面试题:(一)
- 【面试】Morgan Stanley IT面经
- Web全栈工程师的自我修养 心得2
- PHP程序员面试
- 2015(2016届)校园招聘季——酷派 篇
- 2015(2016届)校园招聘季——内推 篇
- SSH面试集锦——不看后悔哦!
- DBA面试题
- WEB前端工程师的职业发展路线图、怎样做WEB前端职业规划
- 【读书笔记】程序员的自我修养总结(五)
- 面试题
- 面试题
- 面试题
- 黑马程序员——基础--枚举
- cmake和make区别
- 找工作之面试题(2)