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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© mengxiang1993 中级黑马   /  2015-1-28 21:03  /  1399 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

   被final修饰的变量是在编译时候就确定值了吗?

11 个回复

正序浏览
String就是这个类型的。
回复 使用道具 举报
定义为常量了,不能改变了!
回复 使用道具 举报
本帖最后由 奔跑的猴子 于 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


回复 使用道具 举报
fightingwang 发表于 2015-1-30 00:26
在局部变量里定义了,也不能改变吧,要是能改变干嘛定义成final呢,求交流,这是我个人的理解 ...

我记得有一次毕老师在内部类那一块说过这个  你可以回头再看下 是不是我说的这个意思  我也记不清了
回复 使用道具 举报
我为你着迷 发表于 2015-1-28 21:33
我觉得这个应该要看被final修饰的变量到底在内存中的什么位置吧。 如果被final修饰的变量存在堆内存中的话 ...

在局部变量里定义了,也不能改变吧,要是能改变干嘛定义成final呢,求交流,这是我个人的理解
回复 使用道具 举报
修饰后是常量,应该不可以改值吧
回复 使用道具 举报
修饰之后就是个常量了  - -
回复 使用道具 举报
被final修饰的变量的值不能被改变的,等于是常量了
回复 使用道具 举报
我觉得这个应该要看被final修饰的变量到底在内存中的什么位置吧。 如果被final修饰的变量存在堆内存中的话肯定是不能被改变的。如果存在于局部变量是可以被更改的吧 。不知道自己理解的对不对 望大神解答疑惑。
回复 使用道具 举报
不是,,,有一次机会改变它,,就是在它的后边整个构造函数,可以改变一次值

点评

可以举例吗?听不太懂啊?  发表于 2015-1-28 22:03
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马