黑马程序员技术交流社区

标题: final类型 [打印本页]

作者: 0小菜鸟0    时间: 2014-8-2 19:55
标题: final类型
本帖最后由 0小菜鸟0 于 2014-8-20 23:05 编辑

final类型的常量的生命周期有多长,比如局部final类型的变量 final int a =10;它的生命周期是随着方法体的结束而消失,还是随着类的消失而消失
作者: liqi    时间: 2014-8-2 20:37
还真没考虑过这个问题,不过觉得有局部常量还有类常量,应该有区别,觉得局部变量就随着方法体的结束而消失。  
等楼下大神的解答
作者: hejinzhong    时间: 2014-8-2 21:10
final只是说我存活期间,我的值不能改变,生命周期和位置有关。你分清static的区别
作者: sunny~    时间: 2014-8-2 22:12
定义在方法体中就是随着方法的结束而消失,定义在类成员随着类走
作者: 南柯一梦    时间: 2014-8-2 23:06
final类型变量声明周期,只是说变量的值不能变,生命周期是看生命的变量是局部还是成员变量,局部话随着局部代码块走,成员随着对象走,而static随着类走
作者: 暗影    时间: 2014-8-2 23:25
局部变量就是随着方法体的结束而消失
作者: conglin1991    时间: 2014-8-2 23:31
来学习下。。。
作者: 梧桐树下    时间: 2014-8-3 00:24
方法结束而消亡,和成员变量有区别
作者: 晓风    时间: 2014-8-3 10:09
final修饰变量的功能是:被final修饰的变量一旦被赋值就不能改变,不会对变量的生命周期有影响。被final修饰的变量,要看其声明的位置,如果是类成员,则生命周期为:对象的开始--》结束;如果是方法的局部变量,生命周期是:方法开始--》结束;如果是静态常量,则生命周期是:类加载就一直存在。
作者: 渴望学习    时间: 2014-8-3 10:40
路过!     
作者: sunshine9091    时间: 2014-8-3 10:43
    局部内部类的对象访问同一个方法中的局部变量,是天经地义的。所以我们要达到一个折中结果:即:局部内部类的对象可以访问同一个方法中的局部变量,只要这个变量被定义为final.那么:为什么定义为final便可以呢?定义为final后,编译程序就好实现了:具体实现方法是:将所有的局部内部类对象要访问的final型局部变量,都成员该内部类对象中的一个数据成员。这样,即使栈中局部变量(含final)已死亡,但由于它是final,其值永不变,因而局部内部类对象在变量死亡后,照样可以访问final型局部变量。
作者: 张涛的狂怒    时间: 2014-8-3 12:54
还是看用在什么地方,final修饰完就是值不能变,
作者: 张涛的狂怒    时间: 2014-8-3 15:38
sunshine9091 发表于 2014-8-3 10:43
局部内部类的对象访问同一个方法中的局部变量,是天经地义的。所以我们要达到一个折中结果:即:局部内 ...

局部方法中的内部类,其局部变量必须用final修饰,当变量是final时,通过将final局部变量"复制"一份,复制品直接作为局部内部中的数据成员.这样:当局部内部类访问局部变量时,其实真正访问的是这个局部变量的"复制品"(即:这个复制品就代表了那个局部变量).因此:当运行栈中的真正的局部变量死亡时,局部内部类对象仍可以访问局部变量(其实访问的是"复制品"),给人的感觉:好像是局部变量的"生命期"延长了.
作者: 0小菜鸟0    时间: 2014-8-5 17:01
sunshine9091 发表于 2014-8-3 10:43
局部内部类的对象访问同一个方法中的局部变量,是天经地义的。所以我们要达到一个折中结果:即:局部内 ...

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

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

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

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

顶一个!!!!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2