Java关于final关键字的使用方法

final关键字

final具有“不可改变”的含义,它可以修饰非抽象类、非抽象成员方法和变量

  1. 用final修饰的类不能被继承,没有子类
  2. 用final修饰的方法不能被子类的方法重写或隐藏
  3. 父类中用private修饰的方法不能被子类的方法重写,因此private类型的方法默认是final类型的
  4. 用final修饰的变量表示常量,只能被赋值一次
final

继承的弱点是打破了封装,子类能够访问父类的实现细节,而且能以方法重写的方式改变实现细节,为克服这一弱点,在以下几种情况下可考虑把类设计为final类型,使它不能被继承

  1. 不是专门为继承而设计的类,类本身的方法之间有复杂的调用关系,若随意创建它的子类,子类有可能错误地修改父类实现细节
  2. 出于安全原因,类的实现细节不允许有任何改动
  3. 在创建对象模型时,确信这个类不会再被扩展,例如java.lang.String类就是final类
final方法

类中声明为final类型的方法,假如父类要保留某些方法,使它们不能被子类继承则可以声明为final方法

final变量

final关键字修饰的变量,其实是将它定义为一个符号常量

  1. final修饰符可以修饰静态变量、实例变量和局部变量,分别表示静态常量、实例常量和局部常量
  2. 接口中定义的变量默认为全局常量,使用public static final修饰
  3. final成员变量应该显式初始化,否则会导致编译错误
  4. 对于final类型的实例变量可以先声明而不必立即赋值,这又称为空白final,可以在构造方法或对象的初始化块中对它赋值
  5. 对于final类型的静态变量,可以在定义时进行初始化,也可以在静态初始化块中进行初始化,若没有显式初始化,系统会自动初始化为默认值
  6. final类型变量只能被赋值一次,即使两次赋的值相同也不行
package inter;

public class FinalTest {
	final int x = 10;
	
//	final静态变量
	public static final int x2 = 100;
//	未赋初值的final变量
	private int x3;
//	final方法
	public final void finalMethod() {
		System.out.println("final方法不能被重写");
	}
//	final静态方法
	public static final void display() {
		System.out.println("final静态方法:"+FinalTest.x2);
	}
	
	public FinalTest(int x) {
//		final变量未赋初值,必须在构造方法中赋值
		this.x3 = x;
		System.out.println("x3初值:"+this.x);
		// TODO Auto-generated constructor stub
	}
	public static void main(String[] args) {
		System.out.println(FinalTest.x2);
//		final变量不能修改
//		FinalTest.x2 = 20;
		FinalTest.display();
		FinalTest p = new FinalTest(1000);
		p.finalMethod();
		
	}

}
/*
100
final静态方法:100
x3初值:10
final方法不能被重写
*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值