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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yan 中级黑马   /  2013-8-10 22:17  /  1800 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

今天看了下final关键字,有个问题想不明白。
例:
有一个person类,里面有一个成员变量,int x=3;创建了一个person的对象
final person p =new person();
我的问题是,被final修饰的是常量,不可以改变,这个对象被修饰之后,是它的引用是常量不能变,还是它的引用值是常量,不能改变?

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1

查看全部评分

4 个回复

倒序浏览
是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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1

查看全部评分

回复 使用道具 举报 1 0
被final 修饰的类不能创建对象了  但是里面的元素随便你弄
回复 使用道具 举报
final类不能被继承,没有子类,final类中的方法默认是final的。
final方法不能被子类的方法覆盖,但可以被继承。
final成员变量表示常量,只能被赋值一次,赋值后值不再改变。
final不能用于修饰构造方法。
(例外)final对象引用不能指向新对象,但是该对象的内部属性是可以改变的。
            就像二元数组,外部数组存放的是内部数组的地址,虽然外部数组的地址值是不能改变的,但是内部数组还是可以重新赋值的。
注意:父类的private成员方法是不能被子类方法覆盖的,因此private类型的方法默认是final类型的。

自己顺便复习了下!

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1

查看全部评分

回复 使用道具 举报
郭利超 发表于 2013-8-10 22:48
被final 修饰的类不能创建对象了  但是里面的元素随便你弄

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

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1 别人只是总结复习,跟这题关系不大.

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马