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
-------------------------------------------------------------------------------
四、单例设计模式
什么是单例设计模式?
设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。
毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是它能被广泛应用的原因。
单例模式的步骤:
第一种:懒汉式,线程不安全
1、必须在该类中,先自己创建一个对象。
2、私有化自身的构造器,防止外界通过构造器创造出新的对象。
3、向外暴露一个公共的静态方法,用于获取自身的对象。