java——final

来源:互联网 发布:刘斐和郭汝瑰 知乎 编辑:程序博客网 时间:2024/05/19 08:02

概述

final的基本意思是不能改变,类似于const,但final的应用范围比const广,java中final可修饰数据对象,方法,类

final修饰数据对象

final修饰数据对象时意义同const,final可修饰的数据对象包括:
  • 类数据成员对象
  • 方法参数对象
  • 方法内局部对象

blank final

  • 如果是blank final,必须确保在首次访问时赋初值,没有初值(或者为0)的blank final意义不大,获取初值后的blank final同非blank final一样,不能在改变
  • 类数据成员对象的blank final,java要求在每个构造函数中赋初值(java确保构造函数被首个调用,普通方法的调用编译器无法控制)
  • 方法内局部对象的blank final,要求在方法内首次访问时必须赋初值,如果没有被访问,可以不赋初值(blank final never used,blan final是多余的)
class Garden{    Garden()    {    System.out.println("Garden");    grassCount = 8;    }        Garden(int gCount)    {    System.out.println("Garden");    grassCount = gCount;    //grassCount = 28;    }      final int grassCount;    final int flowerCount = 5;      void clean(final int workers)    {    final int times;    times = 15;        for(int i = 0; i < times; ++i)    {    System.out.println("clean");    }        //times = 18;    }}

final修饰方法

final修饰方法表示该方法不能被派生类覆写,阻止了其他类改变final方法的行为
final修饰方法规则:
  • private方法本身就不可能被派生类覆写,因此final修饰private方法无意义,尽管可以这么做
  • final不能修饰abstract方法,因为abstract方法天然就要求派生类实现abstract方法定义新行为
  • final不能修饰interface方法,因此interface方法天然就要求实现类实现方法定义新行为

final修饰类

final修饰类表示该类不能被派生,阻止了其他类改变final类的行为
final修饰类规则:
  • final不能修饰abstract类,因为abstract类天然就要求派生类改变abstract类行为
  • final不能修饰interface,因为interface天然就要求实现类实现interface中所有方法定义新行为
0 0