Java全面细致讲解final的使用
一、理解
final:最终的
二、作用
final 可以用来修饰的结构:类、方法、变量
1. 修饰-类
final 用来修饰一个类,表示此类不能被其它类所继承,提高安全性,提高程序的可读性。
比如:String类、System类、StringBuffer类…
代码演示:
final class A{
}
class B extends A{ //错误,不能被继承。
}
2. 修饰-方法
final 用来修饰方法:表明此方法不能被子类重写。
比如:Object
类中getClass();
代码演示:
class A { public final void print() { System.out.println("A"); } } class B extends A { public void print() { // 错误,不能被重写。 } }
3. 修饰-变量
final 修饰的变量(成员变量或局部变量)称为常量。名称大写,且只能被赋值一次。
static final 用来修饰属性:全局常量。
代码演示:
class A { private final String INFO = "嘻嘻"; //声明常量 public void print() { //INFO = "哈哈"; //The final field A.INFO cannot be assigned } }
3.1 修饰-成员变量(属性)
final 标记的成员变量必须在声明(显式初始化)时或在 每个构造器中或代码块中显式赋值,然后才能使用。
如:final double MY_PI = 3.14;
3.2 修饰-局部变量
使用 final 修饰局部变量时,表明此形参是一个常量。当我们调用此方法时,给常量形参赋一个实参。一旦赋值以后,就只能在方法体内使用此形参,且不能进行重新赋值。
三、经典题目
//题目一: public class Test1 { public int addOne(final int x) { // return ++x; //Cannot assign a value to final variable 'x' return x + 1; } } //题目二: public class Something { public static void main(String[] args) { Other o = new Other(); new Something().addOne(o); } public void addOne(final Other o) { // o = new Other(); o.i++; } } class Other { public int i; } //题目三: class Root{ static{ System.out.println("Root的静态初始化块"); } { System.out.println("Root的普通初始化块"); } public Root(){ super(); System.out.println("Root的无参数的构造器"); } } class Mid extends Root{ static{ System.out.println("Mid的静态初始化块"); } { System.out.println("Mid的普通初始化块"); } public Mid(){ super(); System.out.println("Mid的无参数的构造器"); } public Mid(String msg){ //通过this调用同一类中重载的构造器 this(); System.out.println("Mid的带参数构造器,其参数值:" + msg); } } class Leaf extends Mid{ static{ System.out.println("Leaf的静态初始化块"); } { System.out.println("Leaf的普通初始化块"); } public Leaf(){ //通过super调用父类中有一个字符串参数的构造器 super("小老师ir"); System.out.println("Leaf的构造器"); } } public class LeafTest{ public static void main(String[] args){ new Leaf(); System.out.println(); new Leaf(); } } /*output: Root的静态初始化块 Mid的静态初始化块 Leaf的静态初始化块 Root的普通初始化块 Root的无参数的构造器 Mid的普通初始化块 Mid的无参数的构造器 Mid的带参数构造器,其参数值:小老师ir Leaf的普通初始化块 Leaf的构造器 Root的普通初始化块 Root的无参数的构造器 Mid的普通初始化块 Mid的无参数的构造器 Mid的带参数构造器,其参数值:小老师ir Leaf的普通初始化块 Leaf的构造器 */
到此这篇关于Java全面细致讲解final的使用的文章就介绍到这了,更多相关Java final内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Java通过SSLEngine与NIO实现HTTPS访问的操作方法
这篇文章主要介绍了Java通过SSLEngine与NIO实现HTTPS访问,需要在Connect操作、Connected操作、Read和Write操作中加入SSL相关的处理即可,需要的朋友可以参考下2021-08-08Java中Json字符串直接转换为对象的方法(包括多层List集合)
下面小编就为大家带来一篇Java中Json字符串直接转换为对象的方法(包括多层List集合)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧2016-08-08Spring Cloud 中自定义外部化扩展机制原理及实战记录
这篇文章主要介绍了Spring Cloud 中自定义外部化扩展机制原理及实战,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2022-02-02Java并发编程ReentrantReadWriteLock加读锁流程
这篇文章主要介绍了Java并发编程ReentrantReadWriteLock加读锁流程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2023-05-05
最新评论