java的final关键字

来源:互联网 发布:唐小僧 知乎 编辑:程序博客网 时间:2024/06/05 16:29

final的使用场景:

1.有些类在描述完之后,不想被继承

2.有些类中的部分方法功能是固定的,不想让子类重写


为了解决上述问题,我们需要使用final修饰符:final是最终,不可变的意思,它可以用来修饰类,类的成员以及成员变量和局部变量



final的使用分析:

1.final修饰的类不可以配继承,但是可以继承其他类

class A {} //A类final class B extends A{} //B可以继承A类class C extends B{} //C不能继承B类

2.final修饰的方法不可以被覆盖,但是父类没有被final修饰的方法,子类覆盖后可以加上final

class A {// final修饰的方法,不可以被覆盖,但可以继承使用public final void method1(){}public void method2(){}}class B extends A {//重写method2方法public final void method2(){}}

3.final修饰的变量成为常量,该变量只能被赋值一次;在编译生产.class文件后,该变量变为常量值

final int j = 30;j = 40; //赋值报错,final修饰的变量只能赋值一次

4.final修饰成员变量,需要在创建对象前赋值,否则报错(当没有显式赋值时,多个构造方法的均需要为其赋值)

class FinalDemo {//直接赋值final int i = 200;//final修饰的成员变量,需要在创建对象前赋值,否则报错。final int m; public Demo(){//可以在创建对象时所调用的构造方法中,为变量m赋值m = 2017;}}

5.final修饰引用类型的变量值为对象地址值,地址值不能更改,但是地址内的对象属性值可以修改

final Man m = new Man();Man m2 = new Man();m = m2; //final修饰的变量m,所记录的地址值不能改变m.name = "lsy";//可以更改m对象中name属性值