你不可不知的final(3)-初始化时机(失手率比较高的一道面试题)

final就是拒绝修改,防止世界被熊孩子破坏,维护世界和平! 继《你不可不知的final(2)-修饰局部变量(失手率极高的一道面试题)》后,今天我们再看一道失手率比较高的面试题,final的初始化时机。

我们先看这一段代码:

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.构造方法完毕前(非静态常量)。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值