bodong_chen  
Java Space
日历
<2005年11月>
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910
统计
  • 随笔 - 11
  • 文章 - 3
  • 评论 - 2
  • 引用 - 0

导航

常用链接

留言簿(2)

随笔分类

随笔档案

文章档案

Log4j

搜索

  •  

最新评论

阅读排行榜

评论排行榜

 
在Java中这样定义一个整型常量:
    static final int aImmutableInt = 10;
上边的语句定义了一个常量,并赋初值为10。定义一个常量用到了final的关键词。如果在程序的任何地方试图改变这个常量的值,都会遭到编译器的拒绝。
那么,我们能否定义一个常量对象呢?做如下的尝试:
首先定义了一个Circle类:
class Circle
{
  private double radius;

  public Circle(double r)
  {
    radius = r;
  }

  public void setRadius(double r)
  {
    radius = r;
  }

  public double getRadius()
  {
    return radius;
  }
}
下面,定义一个用final修饰的对象wheel,并试图改变它:
public class FinalTest
{
  private static final Circle wheel = new Circle(5.0);

  public static void main(String args[])
  {
    System.out.println("Radius of wheel is " + wheel.radius());
    wheel = setRadius(7.4);
    System.out.println("Radius of wheel is now " + wheel.radius());
  }
}
这时编译器会很爽快地答应,并输出如下结果:
Radius of wheel is 5.0
Radius of wheel is now 7.4
这是为什么呢?

在实践一中谈到了,在java中定义一个对象,这个对象名就是这个对象的一个引用,这个引用的值是内存中的一个地址。在上边的例子中,用final修饰的 是对象的引用的值,而引用类似于一个地址,这里好像就是在对这个引用说:嘿,哥们,你只能指向这个对象了,不能再指向其他的对象了!
而在我们的程序中,这个引用的值确实没有改变,被改变的只是对象的属性值,所以不会报错!
如果把wheel = setRadius(7.4);换成wheel = new Circle(7.4);则肯定不能编译通过。不信?你就试试!
posted on 2005-11-23 15:38 bodong_chen 阅读(308) 评论(0)  编辑  收藏 所属分类: Java

只有注册用户登录后才能发表评论。


网站导航:
 
 
Copyright © bodong_chen Powered by: 博客园 模板提供:沪江博客