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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© H-Deka 中级黑马   /  2014-3-27 18:04  /  1471 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

程序中使用 final 关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?求解释

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

8 个回复

倒序浏览
class KeyWord{
        //final修饰的变量是不允许改变的。
        public final int NUM = 5;
          public static void main(String[] args)
      {
                  KeyWord kw = new KeyWord();
                //在对象引用的时候也是不允许的
                //  kw.NUM = 4;
      }
}

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
被final修饰的属性只能被赋值一次,被final修饰的类不可以被继承,被final修饰的方法不可以被子类重写
回复 使用道具 举报
final修饰的变量,只能初始化一次, 初始化后其值不能再被 改变。 赋值可以在静态代码块中 , 或者其构造方法中去进行赋值  及定义的时候就进行赋值  。 可以用以上三种方式进行赋值。   
回复 使用道具 举报
1:这个关键字是一个修饰符,可以修饰类,方法,变量。
2:被final修饰的类是一个最终类,不可以被继承。
3:被final修饰的方法是一个最终方法,不可以被覆盖。
4:被final修饰的变量是一个常量,只能赋值一次。

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
这个涉及到一个“宏变量”的概念  老毕视频里好像没提到  你可以自己看看

如果定义final变量时就指定初始值,而且这个初始值可以在编译时就确定下来,系统会将其当成“宏变量”
而所谓的宏变量  其实就跟常量一样使用   比如  final int a = 1234;那么在这个程序中a也就一直是个常量了,他不能再被当做变量用来赋值了
回复 使用道具 举报
龙健 中级黑马 2014-3-28 18:53:46
7#
本帖最后由 龙健 于 2014-3-28 18:55 编辑

应用不能变,应用的对象是可以变的,给你举个例子

  1. public class Resolve {

  2.        
  3.        
  4.         /**
  5.          * @param args
  6.          */
  7.         public static void main(String[] args) {
  8.                 // TODO Auto-generated method stub
  9.                
  10.                 final Demo1 demo;
  11.                 demo = new Demo1();
  12.                 //demo=new Demo1();//不可以改变其引用
  13.                 demo.str1="my"; //str是Demo1类中的一个字段,其结果为hello world ,这里可以给他重新赋值
  14.                 System.out.println(demo.str1);//这里的结果为my,可以改变对象里面的值
  15.                

  16.         }

  17. }
复制代码


评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
使用final关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容还是可以改变的。例如,对于如下语句:
final StringBuffer a=new StringBuffer("immutable");执行如下语句将报告编译期错误:
a=new StringBuffer("");但是,执行如下语句则可以通过编译:
a.append(" broken!");

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 赞一个!

查看全部评分

回复 使用道具 举报
muma 中级黑马 2014-3-28 22:18:28
9#
被final修饰的变量只能被赋值一次并且不能改变,被final修饰的类不可以被继承,被final修饰的方法不可以被子类重写
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马