java final 关键字解析

final在Java中用于修饰类、方法和成员变量,阻止继承、重写和修改。final类不能被继承,final方法不能被子类重写,final成员变量一旦赋值后不能改变。对于final修饰的基本类型,其值不可变;而对于final修饰的引用类型,引用本身不可变,但所引用的对象的属性可变。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

修饰范围

类、方法、成员变量。

修饰类

代表着该类不可被继承。例如我们常用的 String 类,它就是使用 final 关键字修饰的。

public class A {};
public class B extends A {} //B 可以继承 A
public class C extends B {} //编译报错,B 已经被 final 关键字修饰了

修饰方法

代表着该方法不可被子类冲重写。例如 AtomicInteger 类中的 get、set 等方法,基本都是使用 final 修饰的。作用就是避免子类修改。

public class Parent {
	public void method1() {
		//do something
	}
	public final void method2() {
		//do othering
	}
}
public class Child {
	public void method1() {} //编译通过
	public void method2() {} //编译报错,提示:'method2()' cannot override 'method2()' in 'Parent'; overridden method is final

修改成员变量

分两种情况:

  1. 如果修饰的成员变量是基本类型,例如 int。则该成员变量的值不可被修改,且必须为其赋值。
public class A {
	private final int a = 1; //直接赋值,后续不允许重新赋值,否则编译报错。
}

public class B {
	private final int a;
	public B(int a) {
		this.a = a; //使用构造函数赋值,后续不允许重新赋值,否则编译报错。常见于 Spring 官方推荐的 Bean 注入
	}
}
  1. 如果修饰的成员变量是引用类型,例如 Student 类。则该成员变量的引用不可被修改,且必须为其初始化。(注意:只是引用不可被修改,但是 Student 类中的成员变量依旧可以修改)
public class Student {
	private String name;
	private int age;
	
	public Student(String name, int age) {
		this.name = name;
		this.age = age;
	}
	
	public void setAge(int age) {
		this.age = age;
	}
	
	public int getAge() {
		return this.age;
	}
}
public class Main {
	private static final Student Z_S = new Student("zhangsan", 20);
	public static void main(String[] args) {
		Z_S.setAge(18);
		System.out.println(Z_S.getAge());
	}
}

以上的结果输出的是:18

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值