黑马程序员技术交流社区

标题: 定义常量的问题 [打印本页]

作者: 侯丛政    时间: 2013-2-27 19:43
标题: 定义常量的问题
本帖最后由 侯丛政 于 2013-2-28 12:31 编辑

public class Constants {
        public static int MAX_SERVICE_TIME = 10000;
        public static int MIN_SERVICE_TIME = 1000;
        public static int COMMON_CUSTOMER_INTERVAL_TIME = 1;         
}


张老师在银行业务系统里的常量类, 可以用final修饰吗, 如果可以的话, 加不加final在意义上会有什么区别吗 ?

作者: 张晋瑜    时间: 2013-2-27 20:20
这个案例的情况的话,我觉得加上final修饰还会跟合理一点,因为这几个数据不需要变化,当能最好加上final设置成常量岂不更完美?
加不加final当能有区别,没加,这几个值可以改变,加了就不能变动

static和fianl的主要用途不同
static:与对象无关,哪个对象中都可以进行访问和修改
final:主要是标明不可改变
作者: 孙娜    时间: 2013-2-28 01:29
你是想用final修饰类还是修饰变量?final修饰变量后,变量就只能被赋值一次;如果修饰类,该类就不能被继承了
作者: 赵海洋    时间: 2013-2-28 07:10
首先更正一点,final修饰的类不是不能被继承,而是不能被重写。
在银行业务系统里,加上final修饰这几个常量是可以的,但我们也需要考虑一下在以后(至于多久之后就要结合现实了)这些量是不是有被重新赋值的可能,如果有,则最好不要加final修饰,如果没有,则可以加上。其实我还是认为这里不加为好。
加不加final的主要现实意义就是看这个能不能被修改。举个例子:
class Fu()
{
       public final void show()
       {
            System.out.println("不可修改");
       }
}
class Zi extends Fu
{
       public void show()
       {
             System.out.printlm("可以修改");
       }
}
这段代码是不能通过编译的,因为在子类中把父类中的final修饰的show函数重写了,这是不可行的。而子类单纯的继承是没有任何问题的,这就是final的主要意义。
作者: 赵海洋    时间: 2013-2-28 07:12
首先更正一点,final修饰的类不是不能被继承,而是不能被重写。
在银行业务系统里,加上final修饰这几个常量是可以的,但我们也需要考虑一下在以后(至于多久之后就要结合现实了)这些量是不是有被重新赋值的可能,如果有,则最好不要加final修饰,如果没有,则可以加上。其实我还是认为这里不加为好。
加不加final的主要现实意义就是看这个能不能被修改。举个例子:
class Fu()
{
       public final void show()
       {
            System.out.println("不可修改");
       }
}
class Zi extends Fu
{
       public void show()
       {
             System.out.printlm("可以修改");
       }
}
这段代码是不能通过编译的,因为在子类中把父类中的final修饰的show函数重写了,这是不可行的。而子类单纯的继承是没有任何问题的,这就是final的主要意义。
作者: 陈丽莉    时间: 2013-2-28 08:19
赵海洋 发表于 2013-2-28 07:10
首先更正一点,final修饰的类不是不能被继承,而是不能被重写。
在银行业务系统里,加上final修饰这几个常 ...

final修饰的类就是不能被继承的,你这个例子中修饰的是方法。
作者: 赵海洋    时间: 2013-2-28 08:23
陈丽莉 发表于 2013-2-28 08:19
final修饰的类就是不能被继承的,你这个例子中修饰的是方法。

啊,恍然大悟,是我错了,谢谢斑竹,差点误导别人了~~~灰常感谢纠正
作者: 孙传磊    时间: 2013-2-28 10:35
就本题而言用不用final修饰都可以,如果要求更高效率的话最好使用final修饰
使用final方法的原因有二:
    第一、把方法锁定,防止任何继承类修改它的意义和实现。
    第二、高效。编译器在遇到调用final方法时候会转入内嵌机制,大大提高执行效率。
final类
     final类不能被继承,因此final类的成员方法没有机会被覆盖,默认都是final的。在设计类时候,如果这个类不需要有子类,类的实现细节不允许改变,并且确信这个类不会载被扩展,那么就设计为final类。
  因此对于该题如果这样定义该类是不是更好
public final class Constants {
         int MAX_SERVICE_TIME = 10000;
         int MIN_SERVICE_TIME = 1000;
         int COMMON_CUSTOMER_INTERVAL_TIME = 1;         
}





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