黑马程序员技术交流社区

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

作者: yan    时间: 2013-8-10 22:17
标题: 关于final关键字
今天看了下final关键字,有个问题想不明白。
例:
有一个person类,里面有一个成员变量,int x=3;创建了一个person的对象
final person p =new person();
我的问题是,被final修饰的是常量,不可以改变,这个对象被修饰之后,是它的引用是常量不能变,还是它的引用值是常量,不能改变?
作者: 李江    时间: 2013-8-10 22:38
是p所指向的对象不能改变,p内的变量x可变。如代码:
  1. public class Demo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 //Person p = new Person();
  6.                 //p.setX(10);
  7.                 final Person p = new Person();
  8.                 //p = new Person();//无法为最终变量p分配值
  9.                 p.setX(12);


  10.                 System.out.println(p.getX());
  11.         }
  12. }

  13. class Person
  14. {
  15.         int x=3;
  16.         public void setX(int x)
  17.         {
  18.                 this.x=x;
  19.         }
  20.         public int getX()
  21.         {
  22.                 return x;
  23.         }
  24. }
复制代码

作者: 郭利超    时间: 2013-8-10 22:48
被final 修饰的类不能创建对象了  但是里面的元素随便你弄
作者: 封号了...    时间: 2013-8-13 16:57
final类不能被继承,没有子类,final类中的方法默认是final的。
final方法不能被子类的方法覆盖,但可以被继承。
final成员变量表示常量,只能被赋值一次,赋值后值不再改变。
final不能用于修饰构造方法。
(例外)final对象引用不能指向新对象,但是该对象的内部属性是可以改变的。
            就像二元数组,外部数组存放的是内部数组的地址,虽然外部数组的地址值是不能改变的,但是内部数组还是可以重新赋值的。
注意:父类的private成员方法是不能被子类方法覆盖的,因此private类型的方法默认是final类型的。

自己顺便复习了下!

作者: kmter    时间: 2013-8-13 23:28
郭利超 发表于 2013-8-10 22:48
被final 修饰的类不能创建对象了  但是里面的元素随便你弄

这里final修饰的应该是Person的对象p, 而并非Person类. 这里修饰的是对象的引用p为常量不可变, 而非对象本身




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