java关键字之final关键字解析

在java中,final关键字和static关键字一样,都可以用来修饰方法成员变量,通常可以用来改善应用程序的性能,但是final强调的是“不可变性”。


1.修饰变量


final关键字可以用来修饰成员变量和方法中的变量。当一个数据被final和static同时修饰时,我们通常把它称为常量。
final的不可变性表现在:被final修饰的变量只能够进行一次赋值操作。



如图所示,当变量第一次被赋值后,就不可以在对其进行更改。

成员变量和方法中的变量有点区别,成员变量必须要进行初始化,而方法中的变量则不必。



对于在修饰成员变量时,只有3种情况可以对它进行赋值。

1.在声明时就进行赋值



2.在构造方法中进行赋值



3.将其加上static修饰符后,可以在static代码块中进行赋值



注意:对于基本数据类型来说,被final修饰后,指的是它的值不会发生改变,对于引用类型来说,被final修饰后指的是它的引用对象不会发生改变(即只能指向最初赋值的那个对象,不能够再更改),但是它引用的这个对象本身是可以改变的,因为引用的其实是一个地址,而这个地址虽然不会变,但地址中的内容可能会变。
class People{
	private String name;
	
	private int age;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}
}
public class Test{
	public static void main(String[] args) {
		final People people = new People();
		people.setName("张三");
		people.setAge(18);
		System.out.println(people.getName());
		System.out.println(people.getAge());
	}
}

最后,由于final在一次赋值后就不会改变,所以如果在编译时就明确知道其值的话,编译器就会把它当做常量来处理,进行相应的优化,可以提高程序效率。


2.修饰方法


在方法前面可以使用final来修饰,一旦声明为final方法,则此方法不能够被子类所重写,但是可以重载。




注意:如果在父类中的final方法是用private修饰的,那么子类中是可以有同名的方法的,但是这里并不是重写,因为private不能被子类继承,所以其实是相当于在子类中有一个新的方法,恰好名字相同而已,这个方法是属于子类的,而不是从父类继承而来的。(注:private方法会被隐式的声明为final)

当我们不想要子类对方法进行重写时,通常会把方法声明为final,此外final方法通常在性能上会比普通方法好一点。


3.修饰类


被final修饰的类是不可以被继承的,常见的比如String类,他就是final类,是不可继承的。使用final类的好处是他们的对象是只读的,可以在多线程下安全的共享,不用额外的同步开销等。

注意:final类的所有方法都被隐式的声明为final方法。


总结


1.修饰变量:只会赋值一次,不会被修改。成员变量必须赋初值。

2.修饰方法:不能被重写,可以被重载。

3.修饰类:不能被继承。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值