关键字final的用法!!

静态的final变量是常数

一个被标记为final的变量代表它一旦被初始化之后就不会改动。也就是说类加载之后静态final变量就一直会维持原值。以Math.PI为例:

public static final double PI = 3.141592653589793;

此变量被标记为public,因此可供各方读取。
此变量被标记为static,所以你不需要Math的实例。
此变量被标记为final,因为圆周率是不变的。
此外没有别的方法可以识别变量为不变的常数(constant),但有命名习惯可以帮助你认出来。
常数变量的名称应该全部由大写字母组成!

静态final变量的初始化:
1. 声明的时候:

public class Foo {
    public static final int FOO_X = 25; 
}

2. 在静态初始化过程中

public class Bar {
    public static final double BAR_SIGN;
    static {
        BAR_SIGN = (double) Math.random();
    }
}

注意上面都是大写的。如果不是通过以上两种方式给该静态变量赋值的话那么在编译的时候编译器会报错。

final不只用在静态变量上

你也可以用final关键字来修饰非静态的变量,这包括了实例变量、局部变量或是方法的参数。不管哪一种,这都代表它的值不能变动。但你也可以用final来防止方法的覆盖或创建子类。

final的变量代表你不能改变它的值。
final的method代表你不能覆盖掉该method。
final的类代表你不能继承该类(也就是创建它的子类)。

非静态final变量

class Foof {
    final int size = 3;  //size将无法改变
    final int whuffie;
    Foof() {
        whuffie = 42;  //whuffie不能改变
    }
    void doStuff(final int x) {
        //不能改变x
    }
    void doMore() { 
        final int z = 7;  //不能改变z
    }
}

final的method

class Poof {
    final void calcWhuffie() {
        //该方法不能被子类覆盖
    }
}

final的class

final class MyMostPerfectClass {
   //不能被子类继承
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值