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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 侯丛政 中级黑马   /  2013-2-27 19:43  /  1549 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 侯丛政 于 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在意义上会有什么区别吗 ?

评分

参与人数 1黑马币 +6 收起 理由
陈丽莉 + 6 关于final,视频里有讲的啊。。.

查看全部评分

7 个回复

倒序浏览
这个案例的情况的话,我觉得加上final修饰还会跟合理一点,因为这几个数据不需要变化,当能最好加上final设置成常量岂不更完美?
加不加final当能有区别,没加,这几个值可以改变,加了就不能变动

static和fianl的主要用途不同
static:与对象无关,哪个对象中都可以进行访问和修改
final:主要是标明不可改变

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
你是想用final修饰类还是修饰变量?final修饰变量后,变量就只能被赋值一次;如果修饰类,该类就不能被继承了

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1 简明扼要

查看全部评分

回复 使用道具 举报
首先更正一点,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的主要意义。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1 虽然答案有出入,但回答很认真,新人鼓励一.

查看全部评分

回复 使用道具 举报
首先更正一点,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:10
首先更正一点,final修饰的类不是不能被继承,而是不能被重写。
在银行业务系统里,加上final修饰这几个常 ...

final修饰的类就是不能被继承的,你这个例子中修饰的是方法。
回复 使用道具 举报
陈丽莉 发表于 2013-2-28 08:19
final修饰的类就是不能被继承的,你这个例子中修饰的是方法。

啊,恍然大悟,是我错了,谢谢斑竹,差点误导别人了~~~灰常感谢纠正
回复 使用道具 举报
就本题而言用不用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;         
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马