final关键字的使用
来源:互联网 发布:什么是核函数 知乎 编辑:程序博客网 时间:2024/06/05 14:28
final从字面上理解含义为“最后的,最终的”。在Java中也同样表示出此种含义。
final可以用来修饰变量(包括类属性、对象属性、局部变量和形参)、方法(包括类方法和对象方法)和类。
1、final修饰变量
当final修饰基本数据类型时,该变量就成为了常量,值无法改变;当final修饰引用数据类型时,该变量的值不能改变,即值中存储的对象内存地址值不变,该变量不能再去指向别的对象,但是对象内的成员可以改变。如下的程序示范了final修饰基本数据类型和引用数据类型的使用。
public class Person { static String name = "王五"; int age = 20; String country = "中国"; public void setAge(int age) { this.age = age; } public void setCountry(String country) { this.country = country; }}
public class FinalTest { final static int number = 100; public static void main(String[] args) { // 下面的注释去掉后编译出错,final修饰的变量number无法再次赋值 // FinalTest.number=200; final Person p1 = new Person(); Person p2 = new Person(); // 下面的注释去掉后编译出错,final修饰的变量p1无法再次赋值 // p1=p2; p1.setCountry("Chinese"); p1.setAge(18); System.out.println("p1.age的值为:" + p1.age); System.out.println("p1.country的值为:" + p1.country); }}
FinalTest类定义了final修饰的基本数据类型的变量number的值为100,因此后面的程序无法更改它的值;随后FinalTest类用final来修饰Person类的对象p1,该变量为引用数据类型,无法更改该变量的值,即不能再将它指向另一个对象,因此语句“p1=p2;”会报错,因为无法将final修饰的对象p1指向另一个对象p2,但是不能改变的仅仅是变量p1中的引用值,对象内部还可以改变,本例程就通过Person的方法重新设置了Person类中变量age和country的值。
当final修饰变量时,由于在第一次赋值之后就无法改变,因此它的初始化就很重要,一般而言,我们对final变量的初始化可以在声明变量时、在类中的构造方法、在静态代码块中赋值。
2、final修饰方法
一个类中的方法如果被final关键字修饰,则其子类无法重写该方法,只能被子类继承。如果父类中的某个方法不想被其子类所覆写,可将该方法定义为final类型。另外,父类中的私有方法(即被private关键字修饰的方法)也不允许被子类所覆写,所以父类中被private关键字修饰的方法默认为final类型。
public class A { public final void f1(){ System.out.println("Hello World"); } }public class B extends A{ //下面这行会报错Cannot override the final method from A public void f1() { System.out.println("你好"); }}
3、final修饰类
final修饰类即表示此类已经是“最后的、最终的”含义。因此,用final修饰的类不能被覆盖,即不能拥有自己的子类。
public final class A {}//下面这行会报错The type B cannot subclass the final class Apublic class B extends A{}
- final关键字的使用
- final关键字的使用
- final 关键字的使用
- final关键字的使用
- final关键字的使用
- final关键字的使用
- final关键字的使用
- final 关键字的使用
- final关键字的使用
- final关键字的使用
- final关键字的使用
- 使用final关键字的规则
- 31.final关键字的使用
- java final关键字的使用
- 关键字static,final的使用
- 151218final关键字的使用
- final关键字的使用方式
- [Java] final 关键字的使用
- 八大排序算法总结与java实现
- 【WEB】Vue2.0音乐APP实战中的知识点总结(四)
- 寻找最大数(二)
- Windows下基于Qt用c++实现ping
- 《马云给年轻人的77条忠告》读书笔记
- final关键字的使用
- 停止java线程的方法及详解
- 如何避免梯度爆炸梯度消失
- cocos2dx基础——坐标系
- A
- 直接插入排序
- SSM:Spring,SpringMVC与MyBatis整合
- 深入理解requestAnimationFrame
- [第五季]11.CSS边框样式