Java中提供了final关键字,标识该属性或方法在程序中“不想被改变”。许多编程语言都有final,它会告知编译器这一部分数据是不可变更的。
Java中,final在三个地方可以使用,分别是类、变量和方法。
1.final修饰类
被final修饰的类不能被继承。这种设计方法是为了保证该类的设计永远不需要做任何改动,而且不希望该类有子类出现。
动手写9.5.1
由于final类禁止被继承,不会出现覆盖方法的情况,所以final类中的所有成员方法都被隐式定义为final。但是,final类中是允许成员变量不被定义为final的。
2.final修饰变量
被final修饰的变量,一旦被初始化就不能更改,一般用作常量。被final修饰的变量在声明时必须被赋值,可以在变量定义时直接赋值,也可以在构造方法中赋值,但是二者必须选其一。final定义的变量不仅可以修饰基本类型数据,也可以修饰对象。当修饰基本类型数据时,该变量的数据值不允许被更改;当修饰对象时,该变量的引用不允许被更改,永远指向初始化的对象。
动手写9.5.2
其运行结果为:
图9.5.1 final修饰变量示例
前面静态常量的讲述中曾有介绍,一个同时被static和final修饰的数据在内存中占有一块不能被改变的存储空间。static和final同时修饰的变量不仅被引用时不可以更改,被引用的对象内部的值也不允许更改。
3.final修饰方法(www.xing528.com)
被final修饰的方法不允许被覆盖重写,这是为了保证子类不能随意更改父类中定义的方法。但是,被final修饰的非私有方法仍可以被子类继承,可以通过子类来访问父类的final非私有方法。
动手写9.5.3
其运行结果为:
图9.5.2 final修饰方法示例
4.final修饰方法入参
final可以修饰方法的入参,被修饰的入参表示在整个方法的代码块中,参数无论是基本数据类型还是对象引用数据类型,都无法被重新赋值(入参传入进来就相当于变量的初始化完成)。给方法入参添加final是一种代码风格保护机制,以避免在大段的代码块中误操作和错误改写变量值。
动手写9.5.4
上面示例编译报错,提示不能修改被final修饰的入参变量,编译结果如下:
图9.5.3 编译结果
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。