二、Java面向对象(11)_final修饰符

2018-05-02

final修饰符

为什么需要final修饰符?

  继承关系最大的弊端就是破坏封装:子类可以访问父类的实现细节,而且可以通过方法覆盖的形式修改细节。

---------------------------------------------------------------------------------------------------

多个修饰符之间是没有先后关系的。 public static final /public final static /final static public 这些写法都正确。

-------------------------------------------------------------------------------------------------------------------

final本身的含义就是最终的,不可改变的。

final可以修饰非抽象类、非抽象方法和变量。注意:构造方法不能被final修饰,因为构造方法不能被继承(构造方法名必须与类名相同,所以无法被继承),因此构造方法本身就是最终的

final书本定义:

1.final可以修饰变量,被final修饰的变量被赋初值后,不能对它重新赋值

2.final可以修饰方法,被final修饰的方法被重写

3.final可以修饰类,被final修饰的类不能派生子类

总的来说,就是值不能改,方法不能重写,类不能继承,就相当于是终结版。

-----------------------------------------------------------------------------------------------

一、final修饰的变量:最终的变量即表示常量,该变量只能赋值一次,不能再次赋值
    
特点:
1、 final变量必须显示指定初始值,系统不会为final字段初始化.

  且只能以以下三种方式进行初始化:

    1)定义时初始化

    2)在非静态初始化块中为final实例变量指定初始值

    3)在构造器中指定初始值


2、 final变量一旦赋予初始值,就不能被重新赋值.
3、常量名规范:常量名称符合标识符,单词全部使用大写。如果由多个单词组成,单词间使用下划线隔开。例如:final int MAX_VALUE = 6;

全局静态变量:使用 public,static, final 同时修饰的变量。直接使用类名调用即可。

-------------------------------------------------------------------------------

面试题:final修饰引用类型的常量到底是表示该变量的引用的地址不能改变还是引用地址里的内容不能改变?
  final修饰基本类型的变量:表示该变量的值不能改变,即不能用" = "号重新赋值
  final修饰引用类型的常量:表示该变量的引用的地址不能改变,而不是引用地址里的内容不能改变

-----------------------------------------------------------------------------------------

final是唯一可以修饰局部变量的修饰符
局部内部类只能访问final修饰的局部变量
-------------------------------------
什么时候使用常量?

     当在程序中,多个地方需要使用到共同的数据,且该数据不会改变,此时我们专门定义全局变量。

   一般在开发中,我们会定义一个常量类,专门用来存储数据。

----------------------------------------------------------------------------------------------------------------------------

二、final修饰的方法:最终的方法,该方法不能被子类覆盖.


什么时候方法需要使用final修饰?
          1):在父类中提供的同一的算法骨架,不准子类通过方法覆盖来修改,此时用final修饰.模板方法设计模式   
          2):在构造器中调用的方法(初始化方法),此时一般使用final.修饰
注意:fina修饰的方法,子类可以调用,但是不能覆盖,

------------------------------------------------------------------------------------------------------------------------------

三、final修饰的类:表示最终的类,该类不能再有子类

 只要满足下列条件之一就可以把一个类设计成final类

  1)本类不是专门为继承而设计

  2)出于安全考虑,类的实现细节不允许改动

  3)该类不会被拓展

面试题:列举5个Java中内置的使用final修饰的类

java里final修饰的类有很多,八大基本数据类型类和String类.

参考:https://www.cnblogs.com/JJ-Chen/p/4672695.html

猜你喜欢

转载自www.cnblogs.com/sunNoI/p/8982356.html