final 关键字

本文详细介绍了Java中final关键字的使用,包括final修饰类、方法、变量和引用的效果。final关键字确保了不可变性,防止继承、方法重写和二次赋值。同时,它在对象引用中影响垃圾回收,但不影响对象内部状态的修改。此外,文章还讨论了常量的定义和命名规范。通过对final的深入理解,有助于提升代码的稳定性和安全性。

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

final使用

  1. final 表示最终的,不可变的
  2. final 修饰的类无法被继承
  3. final 修饰的方法无法被覆盖重写
  4. final 修饰的变量一旦赋值,不可以重新赋值【不可二次赋值】
  5. final 修饰的实例变量,必须手动赋值,不可采用系统赋的默认值
  6. final 修饰的引用,一旦指向某个对象之后,不能再指向其他对象,那么被指向的对象无法被垃圾回收器回收
  7. final修饰的引用虽然不可以再指向其他对象,但是指向的对象内部的内存是可以改变的
  8. 常量语法格式: public static final 类型 常量名 = 值;

1、 final 表示最终的,不可变的

2、 final 修饰的类无法被继承

final class Animal {}
//以下会报错
//class Cat extends Animal {}

3、 final 修饰的方法无法被覆盖重写

class B{
	public final void m(){}
}
class C extends B{
	//编译报错
	//public void m(){}
}

4、final 修饰的变量一旦赋值,不可以重新赋值【不可二次赋值】

	int i = 10;
	i = 20final int k = 100;
	//编译报错:无法为最终变量 k 分配值
	//k = 200;
	
	final int m;
	m = 10;
	//编译报错:无法为最终变量 m 分配值
	//m = 20;

5、final 修饰的实例变量,必须手动赋值,不可采用系统赋的默认值

public class Test{
	//编译报错
	//final int i; 
	
	//第一种解决方案
	final int i = 100;
	
	//第二种解决方案
	final int age;
	public Test(){
		this.age = 20;
	}
	
	public static void main(String[] args){
		final int age;
		age = 100;
		//不可二次赋值
		//age = 200;
	}
}

6、 final 修饰的引用,一旦指向某个对象之后,不能再指向其他对象,那么被指向的对象无法被垃圾回收器回收

public class Test{
	public static void main(String[] args){
		//创建对象
		User u1 = new User(20);   // User u1 = 0x1234
		
		//程序执行到这里表示上面的对象变成了垃圾数据,回收器回收
		//这里是又创建了一个新的对象
		u1 = new User(10);       //  u1 = 0x4567
		
		final User u2 = new User(30);
		//编译报错
		//u2 = new User(50);
	}
}
class User{
	int age;
	public User(){}
	public User(age){
		this.age = age;
	}
}

7、 final修饰的引用虽然不可以再指向其他对象,但是指向的对象内部的内存是可以改变的

public class Test{
	public static void main(String[] args){
		final User u2 = new User(30);
		//编译报错
		//u2 = new User(50);
	
		//通过
		u2.age = 40;
	}
}

8、 因为final 修饰的数据是不可变的,所以现在引入常量的概念

常量

语法格式: public static final 类型 常量名 = 值;

常量名要求字母全部大写,单词之间用下划线连接

public class Test{
	public static void main(String[] args){
		System.out.println(Chinese.GUO_JI);
		System.out.println(Math.PI);
	}
}
class Chinese{
	public static final String GUO_JI = "中国";
}
class Math{
	public static final int PI = 3.1415926;
}

小结

  1. final 表示最终的,不可变的
  2. final 修饰的类无法被继承
  3. final 修饰的方法无法被覆盖重写
  4. final 修饰的变量一旦赋值,不可以重新赋值【不可二次赋值】
  5. final 修饰的实例变量,必须手动赋值,不可采用系统赋的默认值
  6. final 修饰的引用,一旦指向某个对象之后,不能再指向其他对象,那么被指向的对象无法被垃圾回收器回收
  7. final修饰的引用虽然不可以再指向其他对象,但是指向的对象内部的内存是可以改变的
  8. 常量语法格式: public static final 类型 常量名 = 值;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值