final的用法

在java中用到final关键字的地方有三处,Final data,Final methods,Final classes,final其本身的意义是不变的,在基于设计和效率的需要你可能希望某个东西在整个过程不变,下面结合java编程思想分别给出用这在三个地方的意义.
 基本的数据类型前面加上final关键字是用来告诉编译器某块数据是固定不变的,比如
    final int a1 = 5;  //声明一个常量
    static final int A2_VALUE = 10;  //加上static关键字强调他只有一份
    public static final int A3_VALUE = 20;//加上public可以被用于                                                package之外
    这就是永远不可改变的编译器常量,编译期间就能执行某些计算,减少执行期的负担,次类常量必须是基本类型,而且必须在前面加上final关键字,同时必须给定初值。
    static final int a4 = (int)(Math.random()*20);
    这定义了一个在执行期初始化,而你不想改变它的一个常量。
   
    final Value v1 = new Value();
    将 final用于一个引用而不是基本的数据类型的时候,final让这个引用保持不变,表示,一个引用一旦被初始化指向某个对象,便再也无法改变而去指向另一个对象,但此时对象本身的内容是可以改变的。

在某个方法前面加上final关键字,表示这个方法被锁顶,使这个方法的行为在继承的过程中保持不变,而且无法被覆写(overridden).class中所有private方法自然而然就是fianl 方法,以为你无法取用private 方法,更不能覆写,你可以将final关键字加在 private  方法上,但是这不会有任何的意义,画蛇添足。

当把 class声明为 final的时,可能是出与类的设计上考虑,也可能是处于安全保密上考虑,或者是效率上考虑,即你不希望别的类继承这个类,无论你的class是否声明为final类型,他的数据成员该怎么用就怎么用,但是你的class是 final class 那么他的所有方法必然都是  final method。

另外,final Date的用法中,如果在final前还加了static关键字,在该变量当且仅能在声明的时候赋初值,不能在构造函数中赋,反之,如果没有static关键字,则可以在构造函数中赋初值!下面这段代码说明了这个问题

class FinalTest
{
 final int value;
 static final int value1 = 10;//前面加了static,只能在声明的时候初始化,不能在构造函数中赋值
 public static final int value2 = 12;//因为,加了static就强调它只有一份
 static final int a4 = (int)(Math.random()*20);
 
 public FinalTest(int value)//,int value1,int value2)
 {
  this.value = value;
  //this.value1 = 10;//value1;
  //this.value2 = 12;//value2;
 }
 
 public static void main(String[] args)
 {
  new FinalTest(12);
 }
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值