【Java】基础、Final 关键字

本文详细解析了Java中final修饰符在成员变量、类变量、局部变量及引用类型变量上的使用规则与特性,强调了final修饰符在方法与类层面的特殊作用,包括final方法不可被重写但可以重构,final类不可被继承。同时,文章通过对比分析,揭示了final修饰符在数值与地址变化方面的不同影响。

final 修饰符, 表示不可改变的常量

1.final 修饰成员变量的时候初始化的地方有两个, 一个是在定义时候初始化(构造器或者非静态初始化块), 一个是在构建对象时候初始化,只能在一个地方初始化,并且在初始化之后不可以改变。
2.final 修饰类变量的时候可以在定义时候初始化,也可以在静态初始化块中定义初始化
只能在一个地方初始化,并且在初始化之后不可以改变。
3.final 修饰局部变量可以在定义时候初始化,也可以在使用时候初始化, 但是只能初始化一次
4.final 修饰引用类型变量和基本类型的区别
基本类型: 定义之后并且初始化之后不能改变变量中存储的数值。
引用类型: 定义之后并初始化之后不能改变的是引用的地址, 但是引用地址处存储的数值可以改变

总结: final 修饰的数值在初始化之后就不可以改变, 不能改变的只是final修饰的变量,如果是一个地址,
那么这个地址指向的数值可以改变 

final还有以下作用:
	1. 方法的final 不可以被重写, 但是可以重构
	2. 类的final不可以被继承 如:java.long.Math
<think>首先,用户的问题是:“Javafinal关键字”,所以我需要解释Javafinal关键字在类上的用法。 关键点: - 当final关键字用于类时,表示该类不能被继承。 - 例子:public final class MyClass { ... },任何尝试继承MyClass的类都会导致编译错误。 - 用途:防止类被修改或扩展,常用于工具类、不可变类(如String类)或安全相关的类。 - 与final用于方法(防止覆盖)和变量(常量)的区别。 回答结构: 1. 定义:解释final在类上的含义。 2. 目的:为什么使用它。 3. 示例:提供一个简单的代码示例。 4. 注意事项:与其他final用法的区别。 然后,根据规则,在回答后必须提出3-5个相关问题,以“§§相关问题§§”开头,且不能换行分散。问题必须基于用户的问题和我的回答。 相关问题想法: 1. 如果final类不能被继承,如何实现类似功能(如使用组合)? 2. final关键字在方法上的作用是什么? 3. 为什么Java的String类被设计为final? 4. 使用final类有哪些优缺点? 5. final关键字在变量上的用法是什么? 确保问题数量在3-5个。 最后,输出格式: - 先回答问题。 - 然后一行“§§相关问题§§”。 - 接着列出问题,用数字或点号。 示例格式中使用了代码块,所以我也应该在需要时添加代码示例。 完整回答: ### Javafinal关键字Java中,`final`关键字用于类时,表示该类不能被继承。任何尝试继承`final`类的操作都会导致编译错误。 **目的**: - 防止类被扩展,确保类的行为不被修改(例如核心库类如`String`)。 - 增强安全性,避免子类覆盖敏感方法。 - 优化性能,编译器可能进行内联优化。 **示例**: ```java public final class ImmutableClass { private final int value; public ImmutableClass(int value) { this.value = value; } public int getValue() { return value; } } // 尝试继承会报错:Cannot inherit from final 'ImmutableClass' // public class SubClass extends ImmutableClass { ... } ``` **注意**: - `final`用于方法时,表示方法不能被子类覆盖。 - `final`用于变量时,表示变量值不可变(常量)。 §§相关问题§§ 1. 如果一个类被声明为final,如何在不继承的情况下扩展其功能? 2. final关键字在方法上使用时有什么效果? 3. 为什么Java中的String类被设计为final? 4. 使用final类有哪些潜在缺点? 5. final关键字在变量声明中的作用是什么?</think>### Javafinal关键字Java中,`final`关键字用于类时,表示该类**不能被继承**(即不可扩展)。任何尝试继承`final`类的子类将导致编译错误。 **核心作用**: - **防止扩展**:确保类的实现不被修改或覆盖,常用于工具类(如`java.lang.Math`)、不可变类(如`java.lang.String`)或安全敏感类。 - **设计意图**:强制类的不可变性或稳定性,避免因继承引入意外行为。 - **性能优化**:JVM 可能对`final`类的方法进行内联优化(编译时展开代码)。 **示例代码**: ```java // 声明一个final类 public final class Logger { public void log(String message) { System.out.println("Log: " + message); } } // 尝试继承Logger类会报错:Cannot inherit from final 'Logger' // public class CustomLogger extends Logger { ... } // 编译失败 ``` **注意事项**: - `final`用于方法时,表示方法不可覆盖(子类不能重写)。 - `final`用于变量时,表示常量(值不可变)。 - 与`abstract`类互斥:`final`类不能是抽象的,因为抽象类需要被继承。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值