【求助】为什么内部类传参要求对象是final的?不然就会编译错误?是出于什么考虑呢? 例子大家随便试下就知道了,我是用JBuilder 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Finalizer 收尾:每个类都有一个特殊的方法finalizer,它不能被直接调用,而被JVM在适当的时候调用,通常用来处理一些清理资源的工作,因此称为收尾机制。 这是出于变量作用域的限制考虑. 内部类能使用的变量局限于内部类里面声明的变量, 一般情况下不能使用外面的. 但如果外部变量被声明为final的, 就相当于是一个全局变量, 它的生命周期就扩展到内部类里面了, 因此可以访问. Sorry, 好像回答错了, 没看清楚楼主的意思, 不好意思. 匿名内部类才有这个限制,因为匿名内部类使用的参数是外部类的变量,加final修饰符是为了防止该变量指向其他引用,比如你将这个变量指向null而外部类却毫不知情的继续在使用这个null的变量 这个是局部内部类(Local inner class)才有的问题, 编译器必须检查对局部变量的访问,为它们中的每一个都建立相应的成员变量,并且将局部变量拷贝到构造函数中,以能够初始化成员变量作为局部变量的拷贝;被声明为final的局部变量是不能被修改的,因此局部变量和局部类所建立的变量拷贝总是具有相同的值; 如果像楼上的两位所说的话,那么要求对象传参后做一个保护性拷贝不就可以了?也不用非限制为final吧? 为局部参数拷贝到局部内部类的成员变量过程是编译器隐式完成的,程序员是看不见的(如果用反射机制是可以看到编译器给局部内部类创建了被引用参数相应的类的成员变量);如果不为final变量,那么这个变量可能在函数中可能被改变,那么拷贝到局部内部类中相应的成员变量中的值将不是调用函数最初的参数值;为了这种不一致的情况产生,编译器强制要求局部内部类中用到的参数必须为final型的; 如何将\u4e30类似的字符转换成中文 cronExpression 表达式 每天早上3点执行 一个想不通的问题???? eclipse 可以写c函数吗? how? 计算每个顾客消费额的波峰和波谷 去哪里下载jdbc-odbc桥驱动程序? 关于jpanel的问题,在线等候,急~~~~ 请问如何捣乱.class文件,使得反编译器对他失去作用? 请看我的tomcat为何运行不了? 有Winsock高手吗?希望指点 一个菜鸟关于String的问题!!! java的类型识别问题
编译器必须检查对局部变量的访问,为它们中的每一个都建立相应的成员变量,并且将局部变量拷贝到构造函数中,以能够初始化成员变量作为局部变量的拷贝;被声明为final的局部变量是不能被修改的,因此局部变量和局部类所建立的变量拷贝总是具有相同的值;