A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 0小菜鸟0 中级黑马   /  2014-8-2 19:55  /  2638 人查看  /  19 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 0小菜鸟0 于 2014-8-20 23:05 编辑

final类型的常量的生命周期有多长,比如局部final类型的变量 final int a =10;它的生命周期是随着方法体的结束而消失,还是随着类的消失而消失

19 个回复

倒序浏览
还真没考虑过这个问题,不过觉得有局部常量还有类常量,应该有区别,觉得局部变量就随着方法体的结束而消失。  
等楼下大神的解答
回复 使用道具 举报
final只是说我存活期间,我的值不能改变,生命周期和位置有关。你分清static的区别
回复 使用道具 举报
定义在方法体中就是随着方法的结束而消失,定义在类成员随着类走
回复 使用道具 举报
final类型变量声明周期,只是说变量的值不能变,生命周期是看生命的变量是局部还是成员变量,局部话随着局部代码块走,成员随着对象走,而static随着类走
回复 使用道具 举报
局部变量就是随着方法体的结束而消失
回复 使用道具 举报
来学习下。。。
回复 使用道具 举报
梧桐树下 来自手机 中级黑马 2014-8-3 00:24:11
8#
方法结束而消亡,和成员变量有区别
回复 使用道具 举报
final修饰变量的功能是:被final修饰的变量一旦被赋值就不能改变,不会对变量的生命周期有影响。被final修饰的变量,要看其声明的位置,如果是类成员,则生命周期为:对象的开始--》结束;如果是方法的局部变量,生命周期是:方法开始--》结束;如果是静态常量,则生命周期是:类加载就一直存在。
回复 使用道具 举报
路过!     
回复 使用道具 举报
    局部内部类的对象访问同一个方法中的局部变量,是天经地义的。所以我们要达到一个折中结果:即:局部内部类的对象可以访问同一个方法中的局部变量,只要这个变量被定义为final.那么:为什么定义为final便可以呢?定义为final后,编译程序就好实现了:具体实现方法是:将所有的局部内部类对象要访问的final型局部变量,都成员该内部类对象中的一个数据成员。这样,即使栈中局部变量(含final)已死亡,但由于它是final,其值永不变,因而局部内部类对象在变量死亡后,照样可以访问final型局部变量。
回复 使用道具 举报 1 0
还是看用在什么地方,final修饰完就是值不能变,
回复 使用道具 举报
sunshine9091 发表于 2014-8-3 10:43
局部内部类的对象访问同一个方法中的局部变量,是天经地义的。所以我们要达到一个折中结果:即:局部内 ...

局部方法中的内部类,其局部变量必须用final修饰,当变量是final时,通过将final局部变量"复制"一份,复制品直接作为局部内部中的数据成员.这样:当局部内部类访问局部变量时,其实真正访问的是这个局部变量的"复制品"(即:这个复制品就代表了那个局部变量).因此:当运行栈中的真正的局部变量死亡时,局部内部类对象仍可以访问局部变量(其实访问的是"复制品"),给人的感觉:好像是局部变量的"生命期"延长了.

点评

good!  发表于 2014-8-3 18:05
回复 使用道具 举报
sunshine9091 发表于 2014-8-3 10:43
局部内部类的对象访问同一个方法中的局部变量,是天经地义的。所以我们要达到一个折中结果:即:局部内 ...

你回答的这种,纯属硬背下来课本上的对象,你对这个没有理解;还是没有解释清楚为什么要使用final,和fianl变量的生命周期
回复 使用道具 举报
hejinzhong 发表于 2014-8-2 21:10
final只是说我存活期间,我的值不能改变,生命周期和位置有关。你分清static的区别 ...

定义了final的变量,生命周期就改变,它属于一个常量了,但是这个局部内部了为什么只能使用fianl修饰的局部变量,和static有什么关系,想不通
回复 使用道具 举报
南柯一梦 发表于 2014-8-2 23:06
final类型变量声明周期,只是说变量的值不能变,生命周期是看生命的变量是局部还是成员变量,局部话随着局 ...

你这说的非常模糊,那么请问内部类为什么不能使用局部变量,而是要使用局部变量的话,一定要用final修饰他。fianl并不是只有这个使值不能变这个功能,
回复 使用道具 举报
张涛的狂怒 发表于 2014-8-3 15:38
局部方法中的内部类,其局部变量必须用final修饰,当变量是final时,通过将final局部变量"复制"一份,复制 ...

这个回答还算可以解释清楚。
回复 使用道具 举报
   final意思其实不可修改的,只要它被定义了就不能被修改,而它的生命周期是取决于他所在程序中的位置,如果是被static修饰了,那么他就是类对象的一部分,除非类文件被移除出内存,否则的话他就不会消失。而final变量被定义于一个方法中,那么当调用这个方法的线程运行完这个方法中的代码后哪怕这个变量是final的那么它也寿终正寝了。final除了代表不能被修改外,没有其他多余的含义了,这也就是一些常量为什么被定义成final,就像PI啊什么的。
回复 使用道具 举报
晓风 发表于 2014-8-3 10:09
final修饰变量的功能是:被final修饰的变量一旦被赋值就不能改变,不会对变量的生命周期有影响。被final修 ...

顶一个!!!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马