黑马程序员技术交流社区

标题: final关键字,去掉差别不大。为什么要加呢? [打印本页]

作者: 小Zeor………    时间: 2014-2-24 01:38
标题: final关键字,去掉差别不大。为什么要加呢?
public class WeekDay {
        
        private WeekDay(){}
        
        public static final WeekDay MON = new WeekDay();
        public static final WeekDay TUS = new WeekDay();
}
加和不加有什么区别

作者: 疲劳的小马    时间: 2014-2-24 01:55
这样更严谨呀,这是好的编程习惯,对于既定事实,以及一些常量定义都要用final和一个全大写的字母去标识下,方便阅读。
作者: ghhryr    时间: 2014-2-24 02:13
有区别:这个程序是自定义枚举的功能,枚举类型定义:它用于声明一组命名的常数,当一个变量有几种可能的取值时,可以将它定义为枚举类型。由定义可知枚举在java中定义的是一个常量,而不仅仅是一个变量,常量的特性:常量是只有一旦被初始化就不能改变,如果不加final关键字,类中就不是常量,就可以任意的赋值,就会出错。如下代码:

  1. public class ExtendsDemo {

  2.         public static void main(String[] args) {
  3.                 FuTest f1 = FuTest.F1;
  4.                 FuTest.F2 = f1;//这里可以被任意的赋值
  5.                 FuEnumTest fet1 = FuEnumTest.F1;
  6.                 FuEnumTest.F2 = fet1;//枚举类型的常量 不可以 报错
  7.         }

  8. }
  9. class FuTest{
  10.         private FuTest(){}
  11.         public static FuTest F1 = new FuTest();
  12.         public static FuTest F2 = new FuTest();
  13.         public static FuTest F3 = new FuTest();
  14.         public static FuTest F4 = new FuTest();
  15.         public static FuTest F5 = new FuTest();
  16. }
  17. enum FuEnumTest{
  18.         F1,F2,F3,F4,F5;
  19. }
复制代码

作者: 何苦似梦离    时间: 2014-2-24 08:39
final 用于变量时候,这个变量就会编程唯一,也就是说这个变量能赋值一次.
作者: 张继鲁    时间: 2014-2-24 10:53
1.可以修饰类,变量,函数。
    2.被final修饰的类不可以被继承。如果继承了打破了java的封装性。为了避免被继承,被子类复写功能。
    3.被final修饰的方法不可以被复写。
    4.被final修饰的变量是一个常量只能赋值一次,既可以修饰成员变量,又可以修饰局部变量。
        当在描述事物时,一些数据的出现值是固定的,那么这时为了增强阅读性,都给这些值起个名字。方便于阅读。
        而这个值不需要改变,所以加上final修饰。
        作为常量:常量的书写规范所有字母都大写如果多个单词组成。单词间通过 _ 连接。
    5.内部类定义在类中的局部位置上是,只能访问该局部被final修饰的局部变量。
作者: qqwwdr    时间: 2014-2-24 11:45
怎么会没有区别呢?

final 对于常量来说,意味着值不能改变,例如 final int i=10。这个i的值永远都是10。
但是对于变量来说又不一样,只是标识这个引用不可被改变,例如 final File f=new File("c:\\abc.txt");那么这个f一定是不能被改变的,如果f本身有方法修改其中的成员变量,例如是否可读,是允许修改的。
作者: 小Zeor………    时间: 2014-2-24 11:55
张继鲁 发表于 2014-2-24 10:53
1.可以修饰类,变量,函数。
    2.被final修饰的类不可以被继承。如果继承了打破了java的封装性。为了避 ...

给类final 不能被继承,受教了




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