黑马程序员技术交流社区

标题: final关键字 [打印本页]

作者: mengxiang1993    时间: 2015-1-28 21:03
标题: final关键字
   被final修饰的变量是在编译时候就确定值了吗?

作者: yukuoyuan    时间: 2015-1-28 21:06
不是,,,有一次机会改变它,,就是在它的后边整个构造函数,可以改变一次值
作者: 我为你着迷    时间: 2015-1-28 21:33
我觉得这个应该要看被final修饰的变量到底在内存中的什么位置吧。 如果被final修饰的变量存在堆内存中的话肯定是不能被改变的。如果存在于局部变量是可以被更改的吧 。不知道自己理解的对不对 望大神解答疑惑。
作者: hiphopman    时间: 2015-1-29 17:47
被final修饰的变量的值不能被改变的,等于是常量了
作者: syfsyf1993    时间: 2015-1-29 21:37
修饰之后就是个常量了  - -
作者: Android豪    时间: 2015-1-29 22:03
修饰后是常量,应该不可以改值吧
作者: fightingwang    时间: 2015-1-30 00:26
我为你着迷 发表于 2015-1-28 21:33
我觉得这个应该要看被final修饰的变量到底在内存中的什么位置吧。 如果被final修饰的变量存在堆内存中的话 ...

在局部变量里定义了,也不能改变吧,要是能改变干嘛定义成final呢,求交流,这是我个人的理解
作者: 我为你着迷    时间: 2015-1-30 08:05
fightingwang 发表于 2015-1-30 00:26
在局部变量里定义了,也不能改变吧,要是能改变干嘛定义成final呢,求交流,这是我个人的理解 ...

我记得有一次毕老师在内部类那一块说过这个  你可以回头再看下 是不是我说的这个意思  我也记不清了

作者: 奔跑的猴子    时间: 2015-1-30 13:57
本帖最后由 奔跑的猴子 于 2015-1-30 14:05 编辑
yukuoyuan 发表于 2015-1-28 21:06
不是,,,有一次机会改变它,,就是在它的后边整个构造函数,可以改变一次值 ...

在java里面修饰词 final修饰过的变量的值是不可以被修改的。所以所谓修改,其实是定位在于这个final变量还未进行初始化赋值的时候。
1,在外部声明的变量在这个类一开始调用就初始化了,初始化进程在构造器中进行;
2,如果是在外部只定义了一个final变量但是没有赋值的时候,可以在构造器中对这个变量进行赋值;如果在初始化完都没有赋值,编译会报错;
3,但是在方法内定义了一个final变量,如果没有调用这个方法,就不会初始化这个变量,编译器就不会报错,在方法里可以先声明后赋值。

举个例子:
public class FinalDemo
{
        // public final int x;       构造器中未初始化,编译不通过,定义一个未赋值的final变量x
        public final int y;        //定义一个未赋值的final变量y
        public final int z = 10;         //定义一个未赋值的final变量z        
        public  FinalDemo ( )
        {
                this.y  = 20;            //正常编译
                // this.z  = 30;           编译报错,无法为最终变量分配值
        }        
        public static void main(String[] args)
        {
                FinalDemo fnd = new FinalDemo ();
                System.out.println ("y="+fnd.y+";z="+fnd.z);
                fnd.test();               
        }
        public void test ()
        {
                final int m,n;//正常编译,在方法里面,使用时才进行初始化,
                m = 40;
                System.out.println ("m="+m);        
        }        
}

以上代码打印结果为:

y=20;z=10
m=40



作者: 边晓炎    时间: 2015-1-30 15:21
定义为常量了,不能改变了!
作者: bowen-xiao    时间: 2015-1-30 16:20
String就是这个类型的。




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