Java里面的final修饰

final可以修饰各种方法,变量和类。fianl和abstract是互斥的,永远不能同时出现。

final修饰变量:该变量被显示地指定初始值后,不能被重新赋值。final修饰的变量必须被赋值一次且只能赋值一次。

final修饰成员变量:

没有final修饰的成员变量:程序员可以不显示地指定初始值,系统会给其自动赋值。

有fianl修饰的成员变量,程序员必须显示地指定初始值。

final修饰实例变量:必须显示地指定初始值,且只能在以下几个位置指定。(1)变量声明的地方(2)实例初始化块(3)构造器,其实实质上都是到了构造器里面给其赋值。

final修饰类变量:须显示地指定初始值,且只能在以下几个位置指定。(1)变量声明的地方(2)类初始化块,其实质上就是在类初始化块里面赋值。

final修饰局部变量:

没有fianl修饰的局部变量:变量必须在声明的时候指定初始值后才能使用。

有final修饰的局部变量:变量必须在声明的时候指定初始值后才能使用,不同的地方在于该变量不能再被重新赋值。

final修饰的引用类型变量:fianl只能保证引用类型的变量不被改变,其指向的对象是可以改变的。

final Dog a = new Dog();   a 不能再被重新赋值,但是Dog()对象是可以被改变的。

fianl修饰宏替换的变量

如果一个变量满足以下三个条件:

声明变量时有fianl修饰;

声明变量时指定了初始值;

变量的初始值可以在编译时确定(给变量赋值初始值的表达式中没有变量和方法调用等)

这个变量会消失,所有出现该变量的地方在编译时会变成该变量的值。

final修饰方法:

表示该方法不允许被子类重写,该方法可以被重载也可以被子类调用。

备注:private方法修饰的方法表示该方法已经被隐藏在该类的内部,该方法的有效范围在该类里面。子类无法使用该方法,因此也不可能被重写。如final private test(),但是java允许fianl修饰private方法。

final修饰类:表示该类不能被继承。JDK里面有许多类都是用final修饰的如String\Math\System类。


版权声明:本文为qq_42682991原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。