Java中final关键字的用法

Java中final关键字的用法

https://www.cnblogs.com/lixiaolun/p/4317004.html

final:adj. 最终的,不可改变的

我们就取其字面意思”不可改变的“。

final可以修饰类、方法、变量。那么分别是什么作用呢?

(1)修饰类:表示类不可被继承

(2)修饰方法:表示方法不可被覆盖

(3)修饰变量:表示变量一旦被赋值就不可以更改它的值。java中规定final修饰成员变量必须由程序员显示指定变量的值。

final修饰成员变量时,要在哪里执行初始值?

(1)如果final修饰的是类变量,只能在静态初始化块中指定初始值或者声明该类变量时指定初始值。

(2)如果final修饰的是成员变量,可以在非静态初始化块、声明该变量或者构造器中执行初始值。

注意,只能在一个地方指定初始值!!

final修饰局部变量

系统不会为局部变量进行初始化,局部变量必须由程序员显示初始化。因此使用final修饰局部变量时,即可以在定义时指定默认值(后面的代码不能对变量再赋值),也可以不指定默认值,而在后面的代码中对final变量赋初值(仅一次)。

final修饰基本类型变量和引用类型变量的区别?

final修饰基本类型变量时,不能对基本类型重新赋值。

但是,对于引用型变量,它仅仅保存的是一个引用,final保证的是这个引用类型的变量所引用的地址不会变。即一直引用同一个对象,但是这个对象的值可以改变。

class Person()
{
private int age;
public Person(){}
public Person(int age)
{
this.age = age;
}
}

public class FinalReferenceTest
{
main()
{
final int[] iArr={1,2,3,4};
Arrays.sort(iArr);//合法
iArr[2]=-3;//合法
iArr=null;//非法,对iArr不能重新赋值
final Person p = new Person(25);
p.setAge(24);//合法
p=null;//非法
}
}

final修饰方法

final修饰的方法不能被重写。例如Object类中的getClass()方法就是final方法。不能被重写。

父类中private的方法,在子类中不能访问该方法,但是子类中仍然可以定义一个与父类private方法有相同的方法名、相同的形参列表和相同的返回值的方法,不属于方法重写,只是定义了一个新的方法。

final修饰的方法仅仅是不能被重写,并不是不能被重载。下面的代码,是方法重载,仍然没有错误!

public class FinalClass
{
public final void test(){}
public final void test(int i){}
}

final修饰类

final修饰的类不能被继承!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值