在C++中,可以用构造函数的参数表初始化对象的常量成员,如此常量成员的值可在运行时指定,Java中能实现同样的功能么?
Java中好像在进入构造函数前,常量成员就已经初始化了,若是这样的话,似乎很难实现在运行时指定常量值,我能想到办法是在对象构造利用类成员存储参数值,对象构造时利用类成员初始化常量成员.

解决方案 »

  1.   

    帮你顶,我也是初学。好像只能声明的时候就初始化。比如static final NUM = 100;
      

  2.   

    对象的final成员 也就是常量 可以在定义的时候赋值也可以在构造函数里面赋值不过两者只能选一,而且必须选一保证对象在使用之前常量已经赋值,static final 因为是类的常量,所以肯定不能依赖构造函数来赋值
    不过也可以 在static块里面赋值class InitFinal {
       final int i  ;
       final int j ;
       static final int kk;
       static {
       kk = 9;
       }
       public InitFinal(int m , int n) {
       i = m ;
       j = n ;
       }
    }
    看看这个类就清楚了
      

  3.   

    呕,是这样啊。谢谢楼上。不过我还有个问题,static final和final作为常量时有什么区别吗?我看一本书上说,由于类成员量被final之后,不能修改其值,为了节省资源,通常都被同时声明为static,所以我一直把static final看成一个类似const的整体了。今天一看还是有区别的。那到底他们各自适用于什么情况呢?xiexie
      

  4.   

    static标示的成员变量为在内存或者编译后的文件中(常量的值存在class文件中,而不是内存中),它可以在不需要new一个对象就直接用类名加点调用。比如PI在Math类中声明为static final,你在import Math类后,可以直接用Math.PI来使用PI值,而不需要Math m = new Math(); m.PI;来调用PI。
         由于JAVA没有全局变量这个定义,所以一般都用static final定义常量,你的理解是正确的。
    至于为了节省资源而声明为static,我认为是瞎说。
      

  5.   

    http://www.graphics.net.cn/document/java/006/272.asp