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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 孙百鑫 于 2013-6-27 07:41 编辑

求详解,个人感觉不会!

评分

参与人数 1技术分 +1 收起 理由
孙百鑫 + 1 赞一个!

查看全部评分

6 个回复

倒序浏览
final修饰的数据对数据在内存中的存储位置没有任何影响的。
回复 使用道具 举报
只是终态的话,,没有静态,,
是会的,,因为在方法栈里

  final关键字无非修饰两种变量,一是全局变量,当修饰全局变量的时候,作用域自然是全局,另一种是修饰局部变量,这里要注意,java中不同于c语言中,即时使用final修饰了局部变量,并没有改变该变量的作用域,当这个方法执行完毕之后,就会释放掉这个方法的帧内存。变量就被销毁了,堆里的对象等待gc回收。

第一种情况:作为全局常量来使用,定义的时候就要进行显示初始化,如果定义的时候不进行显示初始化,则必须在构造函数里进行初始化。

class Student {
    String name;
    int age;
    final Teacher tc;
    public void study(){
    }
    public Student(String name,int age){
        tc = new Teacher();
    }
    public Student(){
        this(null, 0);
    }
}
class Teacher{
    int num;
    String name;
    int age;
}


第二种情况,在函数中使用,

public void startThread(){
        final Student stumain = new Student();
        final Teacher teacher;
        new Thread(new Runnable(){
            @Override
            public void run() {
                stumain.study();
teacher = new Teacher();//这行代码是报错的
            }
        }).start();
    }



评分

参与人数 1技术分 +1 收起 理由
孙百鑫 + 1 赞一个!

查看全部评分

回复 使用道具 举报
是终态的,定义为final 将无法修改,一般为了安全会这样用,或者写死一些东西,比如说男女。
回复 使用道具 举报
常量,肯定不会啦
回复 使用道具 举报
final关键字对于变量的存储区域是没有任何影响的。jvm规范中,类的静态变量存储在方法区,实例变量存储在堆区。也就是说static关键字才对变量的存储区域造成影响。
final关键字来修饰变量表明了该变量一旦赋值就无法更改。同时编译器必须保证该变量在使用前被初始化赋值。

评分

参与人数 1技术分 +1 收起 理由
孙百鑫 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
楼主您好。我已将您的帖子改成已解决。如果帖子发布长时间没加分。及时联系我。以免漏分的情况发生{:soso_e100:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马