网站首页 > 精选教程 正文
Java中final关键字可以修饰类、方法、属性、局部变量、方法参数。
在修饰类时,该类不允许被继承;
在修饰方法时,该方法继承后不允许被覆盖/重写;
在修饰属性时,创建对象是完成初始化,之后不允许修改。相当于是对象内的常量。
在修饰方法内的局部变量和方法参数时,局部只允许赋值一次,参数则是方法被调用时设置初始值,之后不能再修改值。相当于是方法内的常量
以下是Java中final关键字在不同应用场景下的具体实例,这些实例展示final关键字在Java中用于确保类不可继承、方法不可重写、变量(包括成员变量、局部变量和方法参数)不可重新赋值的不同应用场景。
1. 修饰类
在设计类时,如果考虑到未来不需要对类进行扩展或修改,将其声明为 final 。在这个例子中,final关键字用于修饰ImmutablePerson类,使得该类不可被其他类继承。
public final class ImmutablePerson {
private final String name;
private final int age;
public ImmutablePerson(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
// 试图继承ImmutablePerson会编译错误
class MutablePerson extends ImmutablePerson { // 编译错误: 无法继承final类 'ImmutablePerson'
// ...
}
在 JDK 中,有一些预定义的 final 类,这些类因为设计上的考虑或者出于安全原因,不允许被继承。以下是一些实际的 final 类:
- java.lang.String:字符串在 Java 中是不可变的,因此 String 类是 final 的。
- java.lang.Math:包含一系列静态数学方法的 final 类。
- java.lang.System:提供了访问系统级操作的类,如环境变量和系统属性。
- java.util.Arrays:包含各种操作数组的方法,如排序和搜索。
此外,所有的包装类(如 Integer、Boolean 等)也都是 final 的,这是为了保证它们的不可变性。
2. 修饰方法
public class Calculator {
public final double calculateSquare(double num) {
return Math.pow(num, 2);
}
}
class AdvancedCalculator extends Calculator {
// 下面的重写尝试会编译错误
// @Override
// public double calculateSquare(double num) {
// return num * num * num; // 实现立方计算
// }
}
这里final修饰了Calculator类的calculateSquare方法,确保该方法在任何子类中都无法被重写。
3. 修饰属性(成员变量)
public class Constants {
public static final String COMPANY_NAME = "北京交通大学";
public final String employeeID;
public Constants(String id) {
this.employeeID = id;
}
}
Constants c = new Constants("E001");
System.out.println(c.COMPANY_NAME); // 输出: 北京交通大学
System.out.println(c.employeeID); // 输出: E001
// 尝试修改final变量的值会引发编译错误
// c.COMPANY_NAME = "New Company"; // 编译错误: 对于最终变量 'COMPANY_NAME',不允许赋值
// c.employeeID = "E002"; // 编译错误: 对于最终变量 'employeeID',不允许赋值
final用于修饰类Constants中的静态成员变量COMPANY_NAME和实例变量employeeID,使得它们一旦初始化后就不能再被改变。
4. 修饰变量(局部变量)
public class Example {
public void processData(int[] values) {
final int size = values.length;
for (int i = 0; i < size; i++) {
// ... 处理数据
}
}
}
在方法processData中,final修饰局部变量size,表示在循环过程中其值始终保持不变,增强了代码的可读性和防止意外修改。
5. 修饰方法参数
public void printDetails(final Person person) {
System.out.println(person.getName());
// person = new Person("Different Name"); // 编译错误: 对于最终变量 'person',不允许赋值
}
printDetails(new Person("CHEN xd"));
在方法printDetails中,参数person被声明为final,这意味着在方法内部不能重新赋值给person新的Person对象。虽然不能改变引用本身,但可以通过方法调用来修改person对象的内部状态(如果对象的属性不是final的话)。
猜你喜欢
- 2024-10-30 java 你用了这么久,真的明白static和final的区别么?
- 2024-10-30 JAVA笔记(十五)面向对象——关键字abstract、final
- 2024-10-30 「java面试_01」String类为什么是final
- 2024-10-30 Java编程思想:final 关键字 java中finally关键字
- 2024-10-30 Java八股文:final、finally、finalize之间有什么区别
- 2024-10-30 在java中String类为什么要设计成final?Java面试常见问题
- 2024-10-30 lambda中的外部局部变量为什么需要声明final?
- 2024-10-30 java笔记static和final用法 java static与final
- 2024-10-30 Java中为什么String类被定义成final
- 2024-10-30 Java中的final修饰符 java中final可以修饰接口吗
你 发表评论:
欢迎- 04-11Java面试“字符串三兄弟”String、StringBuilder、StringBuffer
- 04-11Java中你知道几种从字符串中找指定的字符的数量
- 04-11探秘Java面试中问的最多的String、StringBuffer、StringBuilder
- 04-11Python字符串详解与示例(python字符串的常见操作)
- 04-11java正则-取出指定字符串之间的内容
- 04-11String s1 = new String("abc");这句话创建了几个字符串对象?
- 04-11java判断字符串中是否包含某个字符
- 04-11关于java开发中正确的发牌逻辑编写规范
- 最近发表
-
- Java面试“字符串三兄弟”String、StringBuilder、StringBuffer
- Java中你知道几种从字符串中找指定的字符的数量
- 探秘Java面试中问的最多的String、StringBuffer、StringBuilder
- Python字符串详解与示例(python字符串的常见操作)
- java正则-取出指定字符串之间的内容
- String s1 = new String("abc");这句话创建了几个字符串对象?
- java判断字符串中是否包含某个字符
- 关于java开发中正确的发牌逻辑编写规范
- windows、linux如何后台运行jar(并且显示进程名)
- 腾讯大佬私人收藏,GitHub上最受欢迎的100个JAVA库,值得学习
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)