黑马程序员技术交流社区

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

作者: H-Deka    时间: 2014-3-27 18:04
标题: final关键字
程序中使用 final 关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?求解释

作者: 橡皮-leo    时间: 2014-3-27 19:58
class KeyWord{
        //final修饰的变量是不允许改变的。
        public final int NUM = 5;
          public static void main(String[] args)
      {
                  KeyWord kw = new KeyWord();
                //在对象引用的时候也是不允许的
                //  kw.NUM = 4;
      }
}
作者: 郭黎明    时间: 2014-3-27 20:07
被final修饰的属性只能被赋值一次,被final修饰的类不可以被继承,被final修饰的方法不可以被子类重写
作者: ___________゛M    时间: 2014-3-27 20:41
final修饰的变量,只能初始化一次, 初始化后其值不能再被 改变。 赋值可以在静态代码块中 , 或者其构造方法中去进行赋值  及定义的时候就进行赋值  。 可以用以上三种方式进行赋值。   
作者: 枫露    时间: 2014-3-27 22:38
1:这个关键字是一个修饰符,可以修饰类,方法,变量。
2:被final修饰的类是一个最终类,不可以被继承。
3:被final修饰的方法是一个最终方法,不可以被覆盖。
4:被final修饰的变量是一个常量,只能赋值一次。

作者: 路西法    时间: 2014-3-28 01:09
这个涉及到一个“宏变量”的概念  老毕视频里好像没提到  你可以自己看看

如果定义final变量时就指定初始值,而且这个初始值可以在编译时就确定下来,系统会将其当成“宏变量”
而所谓的宏变量  其实就跟常量一样使用   比如  final int a = 1234;那么在这个程序中a也就一直是个常量了,他不能再被当做变量用来赋值了
作者: 龙健    时间: 2014-3-28 18:53
本帖最后由 龙健 于 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. }
复制代码



作者: 你好!默默    时间: 2014-3-28 21:40
使用final关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容还是可以改变的。例如,对于如下语句:
final StringBuffer a=new StringBuffer("immutable");执行如下语句将报告编译期错误:
a=new StringBuffer("");但是,执行如下语句则可以通过编译:
a.append(" broken!");
作者: muma    时间: 2014-3-28 22:18
被final修饰的变量只能被赋值一次并且不能改变,被final修饰的类不可以被继承,被final修饰的方法不可以被子类重写




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