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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© skill20 中级黑马   /  2014-4-16 17:51  /  1925 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

final 是一个最终修饰符,修饰的不能继承,方法不能覆盖,修饰的变量只能赋值一次。
现在被final 修饰的引用类型对象怎么变化?
如: final  Object a = new Object();

评分

参与人数 1技术分 +1 收起 理由
黑妞~ + 1

查看全部评分

6 个回复

倒序浏览
使用final修饰引用类型变量,变量的值是固定不变的,而变量所指向的对象的属性值是可变的 。

评分

参与人数 1黑马币 +1 收起 理由
skill20 + 1 赞一个!

查看全部评分

回复 使用道具 举报
当final修饰一个原生数据类型时,表示该原生数据类型的值不能发生变化;

  如果final修饰一个引用类型时,表示该引用类型不能再指向其他对象了,但该引用所指向的对象的内容是可以发生变化的。

  本质上是一回事,因为引用的值是一个地址,final要求值,即地址的值不发生变化。

  final修饰一个成员变量(属性),必须要显示初始化。

评分

参与人数 1黑马币 +2 收起 理由
skill20 + 2 赞一个!

查看全部评分

回复 使用道具 举报 1 0
  1. class Demo665
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 final Person p=new Person("lisi",22);
  6.                 p.name="zhangsan";
  7.                 p.age=223;
  8.                 //Person p1=new Person("wangwu",90);
  9.                 //p=p1;
  10.                 System.out.println(p.name+p.age);
  11.         }
  12. }
  13. class Person
  14. {
  15.         String name;
  16.         int age;
  17.         Person(String name,int age)
  18.         {
  19.                 this.name=name;
  20.                 this.age=age;
  21.         }
  22. }
复制代码
看我代码,final修饰的对象的指向不能变,但是指向的对象的值是可以变的

评分

参与人数 2技术分 +1 黑马币 +2 收起 理由
枫儿 + 1 赞一个!
skill20 + 2 很给力!

查看全部评分

回复 使用道具 举报 2 0
月光海 发表于 2014-4-16 18:06
看我代码,final修饰的对象的指向不能变,但是指向的对象的值是可以变的

懂了,谢谢了!
回复 使用道具 举报
final是java中的一个关键字,可以用来修饰变量、方法和类。用关键词final修饰的域成为最终域。用关键词final修饰的变量一旦赋值,就不能改变,也称为修饰的标识为常量。如果一个类的域被关键字final所修饰,它的取值在程序的整个执行过程中将不会改变。

简单的归纳说:
  final:最终。作为一个修饰符。
   1、可以修饰类、函数、变量。
   2、被final修饰的类不可以被继承。为了避免被继承:被子类复写的功能。
   3、被final修饰的方法不可以被复写。
   4、被final修饰的变量是一个常量只能赋值一次,既可以修饰成员变量;也可以修饰局部变量。
   举个例子简单的说:
   class Demo-final {}
final class Dinosaur
{
int x = 7;
int y = 1;
Demo-final x = new Demo-final();
void f() {}
}
public class Jurassic
{
public static void main(String[] args)
{
Dinosaur n = new Dinosaur();
n.f();
n.x = 40;
n.y++;
}
}
数据成员既可以是final,也可以不是,取决于我们具体选择。应用于final的规则同样适用于数据成员,无论类是否被定义成final。将类定义成final后,结果只是禁止被继承——没有更多的限制。然而,由于它禁止被继承,所以一个final类中的所有方法都默认为final。因为此时再也无法覆盖它们。所以这与我们将一个方法明确声明为final一样。
     
回复 使用道具 举报
可以用于做单例模式,final修饰的对象,在堆内存中的地址不能改变了,但是对象封装的内容是可以改变的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马