你不可不知的final(3)-初始化时机(失手率比较高的一道面试题)
2016-10-17 19:49
225 查看
final就是拒绝修改,防止世界被熊孩子破坏,维护世界和平! 继《你不可不知的final(2)-修饰局部变量(失手率极高的一道面试题)》后,今天我们再看一道失手率比较高的面试题,final的初始化时机。
我们先看这一段代码:
请说出输出结果:
Init()-1:10
Init()-2:100
new Init():100
先成员变量初始化,在加载构造方法,十分Easy。
接下来我们引入final,修改代码引入numFinal:
大家猜一猜结果?
不用猜,直接报错:The final field Init.numFinal cannot be assigned
我们今天的第一条结论:
被final修饰的变量只能初始化一次。
我们继续改代码,引入numFinal2:
大家猜一猜结果?
不用猜,直接报错:The blank final field numFina2 may not have been initialized
因此我们在构造函数中添加代码:numFinal2 = 300;
由此,得出我们的第二条结论:
final的赋值时机:
1.定义的时候。(推荐)
2.构造方法完毕前(非静态常量)。
我们先看这一段代码:
class Init{ int num = 10; public Init(){ System.out.println("Init()-1:" + num); num = 100; System.out.println("Init()-2:" + num); } }
Init i = new Init(); System.out.println("new Init():" + i.num);//100:成员变量初始化,构造方法
请说出输出结果:
Init()-1:10
Init()-2:100
new Init():100
先成员变量初始化,在加载构造方法,十分Easy。
接下来我们引入final,修改代码引入numFinal:
class Init{ int num = 10; final int numFinal = 20; public Init(){ System.out.println("Init()-1:" + num); num = 100; System.out.println("Init()-2:" + num); numFinal = 200; } }
大家猜一猜结果?
不用猜,直接报错:The final field Init.numFinal cannot be assigned
我们今天的第一条结论:
被final修饰的变量只能初始化一次。
我们继续改代码,引入numFinal2:
class Init{ int num = 10; final int numFinal = 20; final int numFinal2; public Init(){ System.out.println("Init()-1:" + num); num = 100; System.out.println("Init()-2:" + num); //numFinal = 200; //The final field Init.numFinal cannot be assigned } }
大家猜一猜结果?
不用猜,直接报错:The blank final field numFina2 may not have been initialized
因此我们在构造函数中添加代码:numFinal2 = 300;
由此,得出我们的第二条结论:
final的赋值时机:
1.定义的时候。(推荐)
2.构造方法完毕前(非静态常量)。
相关文章推荐
- 你不可不知的final(2)-修饰局部变量(失手率极高的一道面试题)
- Java常量池详解之一道比较蛋疼的面试题
- 一道面试题比较synchronized和读写锁
- 这是网友发的一道很常见的面试题, for(foo('A');foo('B')&&(i<2);foo('C')) ,其实考的就是for (初始化语句; 判断条件; 循环条件) ,现在详细解析一下!
- final修饰的成员变量初始化时机
- 一道关于静态变量的初始化顺序面试题
- 这是网友发的一道很常见的面试题, for(foo('A');foo('B')&&(i<2);foo('C')) ,其实考的就是for (初始化语句; 判断条件; 循环条件) ,现在详细解析一下!
- 一道Java初始化面试题
- 一道比较实用的MySQL面试题:游戏数据充值查询
- 一道个人感觉比较有水平的JS面试题,反正我看错了
- Java常量池详解之一道比较蛋疼的面试题
- 面试题:List去重,不可不知的五种方法
- <转>一道面试题比较synchronized和读写锁
- 写出float x 与“零值”比较的if语句——一道面试题分析
- 一道面试题:比较两个集合是否相等?
- java--常量池详解之一道比较蛋疼的面试题
- Java中字符串比较的一道面试题
- 一道面试题:怎么比较两个集合是否相等?
- 一道面试题比较synchronized和读写锁
- 一道面试题:怎么比较两个集合是否相等?(转)