c4700使用了未初始化的局部变量_Java的final关键字使用与理解

final关键字可以对类、方法、成员变量、局部变量进行修饰,下面我将会从这几个方面讲解final关键字如何使用和理解。

一、final关键字修饰类

当用final关键字修饰一个类时表明这个类无法被继承 ,如果你想设计一个类不想被继承,那么就加上final关键字。

50a15f72f13d8aecf64decd37daf922f.png

二、final关键字修饰方法

当用final关键字修饰一个方法时,这个方法无法被Override。

e1baa7398c587013c476f1590a06da85.png        

三、final关键字修饰成员变量

成员变量被final关键字修饰后,只能在定义和构造函数时初始化值,而无法被成员函数重新赋值。

dee0fa11d32a33f7a00ff06abb469ed3.png

四、final关键字修饰局部变量

当final关键字修饰局部变量时,也是只能再定义时进行初始化,无法被重新赋值。final关键字修饰基本数据类型和String类型时,如果在编译期间能确定值,就会把它当做常量来使用,在所有用到的地方直接用字符串代替,类似于C语言的宏。如果是在运行期间才能确定,则在运行时用到的地方使用值代替。我们可以看以下的例子。

c3b94115671e4f50e98a7c5839a8774f.png       由于str2在编译时就能确定值,所以str4引用指向的地址实际上和str一样,指向同一个字符串常量地址。而str1只能在运行时才能知道值,所以str3指向的是栈里面的地址,所以输出结果分别是false和true。

五、final关键字修饰对象实例

被final关键字修饰的对象实例,虽然不能指向其他对象的引用,但是可以修改引用指向对象的内容。

2166fff5b7b5879013ed008991ac7022.png        final关键字修饰的对象实例,无法指向其他对象实例的引用。

我们再来看一下是否可以修改指向的对象内容。

08b6fff127e5e879475834a9a11e6ac1.png        输出值为2,说明对象的内容被改变了!

六、final修饰形参

被final修饰的基本数据类型通过形参传递是无法修改外部变量也无法修改形参的值,类似于C++的const关键字修饰基本数据类型。但是传递引用类型则可以修改外部变量的值,形参却无法引用其他对象实例,类似于C++的常量指针,我们可以看一下下面的例子。

传递基本数据类型:

0629dcc793af5b8115d771420cb3e3cc.png        

传递引用类型:

8ef0e033bfb89472ee3256da2bc730d2.png        

外部变量的对象内容被修改了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值