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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

public class WeekDay {
        
        private WeekDay(){}
        
        public static final WeekDay MON = new WeekDay();
        public static final WeekDay TUS = new WeekDay();
}
加和不加有什么区别

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

6 个回复

正序浏览
张继鲁 发表于 2014-2-24 10:53
1.可以修饰类,变量,函数。
    2.被final修饰的类不可以被继承。如果继承了打破了java的封装性。为了避 ...

给类final 不能被继承,受教了
回复 使用道具 举报
怎么会没有区别呢?

final 对于常量来说,意味着值不能改变,例如 final int i=10。这个i的值永远都是10。
但是对于变量来说又不一样,只是标识这个引用不可被改变,例如 final File f=new File("c:\\abc.txt");那么这个f一定是不能被改变的,如果f本身有方法修改其中的成员变量,例如是否可读,是允许修改的。
回复 使用道具 举报
1.可以修饰类,变量,函数。
    2.被final修饰的类不可以被继承。如果继承了打破了java的封装性。为了避免被继承,被子类复写功能。
    3.被final修饰的方法不可以被复写。
    4.被final修饰的变量是一个常量只能赋值一次,既可以修饰成员变量,又可以修饰局部变量。
        当在描述事物时,一些数据的出现值是固定的,那么这时为了增强阅读性,都给这些值起个名字。方便于阅读。
        而这个值不需要改变,所以加上final修饰。
        作为常量:常量的书写规范所有字母都大写如果多个单词组成。单词间通过 _ 连接。
    5.内部类定义在类中的局部位置上是,只能访问该局部被final修饰的局部变量。
回复 使用道具 举报
final 用于变量时候,这个变量就会编程唯一,也就是说这个变量能赋值一次.
回复 使用道具 举报
有区别:这个程序是自定义枚举的功能,枚举类型定义:它用于声明一组命名的常数,当一个变量有几种可能的取值时,可以将它定义为枚举类型。由定义可知枚举在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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
这样更严谨呀,这是好的编程习惯,对于既定事实,以及一些常量定义都要用final和一个全大写的字母去标识下,方便阅读。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马