Bootstrap

Variable ‘cal‘ is accessed from within inner class, needs to be declared final

Variable ‘cal’ is accessed from within inner class, needs to be declared final
变量在内部类中被访问,那么该变量必须在外部声明为final

  1. 内部类中使用但未声明的任何局部变量必须在内部类的正文之前明确分配。

  2. Java匿名内部类的方法中用到的局部变量都必须定义为final

  3. 在JVM中,内部类不是直接调用方法的参数,而是内部类将传进来的参数通过自己的构造器备份到了自己的内部,自己内部的方法调用的实际是自己的属性而不是外部类方法的参数。

比如:

class A{
	final string a=“aabbcc”;
	class B{
		print(a);
	}
}

类A中的内部类B的函数print()调用了定义在A中的参数a,这个时候如果不加final,就会出错。

因为内部类被编译的时候会生成一个单独的内部类的.class文件,这个文件并不与外部类在同一class文件中。

注意:
如果内部类掉了这些参数的值也不可能影响到原参数,然而这样却失去了参数的一致性,因为从编程人员的角度来看他们是同一个东西,如果编程人员在程序设计的时候在内部类中改掉参数的值,但是外部调用的时候又发现值其实没有被改掉,这就让人非常的难以理解和接受,为了避免这种尴尬的问题存在,所以编译器设计人员把内部类能够使用的参数设定为必须是final来规避这种莫名其妙错误的存在。

;