zoukankan      html  css  js  c++  java
  • final修饰符

    final从字面上理解含义为“最后的,最终的”。在Java中也同样表示出此种含义。

    为什么需要使用final修饰符:

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

    final可以用来修饰变量(包括类属性、对象属性、局部变量和形参)、方法(包括类方法和对象方法)和类。

    1. final修饰类:

    final修饰类即表示此类已经是“最后的、最终的”含义。因此,用final修饰的类不能被继承,即不能拥有自己的子类。

    如果视图对一个已经用final修饰的类进行继承,在编译期间或发生错误。

    什么时候把一个类设计成final类呢:

    ① 某类不是为了继承而设计

    ② 出于安全考虑,类的实现细节不许改动,不许修改源代码.

    ③ 确信该类不会再被拓展 

    2. final修饰方法:

    final修饰的方法表示最终的方法,该方法不能被子类覆盖.亦即此方法不能被覆盖(可以重载多个final修饰的方法)。此处需要注意的一点是:因为重写的前提是子类可以从父类中继承此方法,如果父类中final修饰的方法同时访问控制权限为private,

    将会导致子类中不能直接继承到此方法,因此,此时可以在子类中定义相同的方法名和参数,此时不再产生重写与final的矛盾,而是在子类中重新定义了新的方法。

    什么时候的方法需要使用final修饰呢?

    ① 在父类中提供统一的算法骨架,不准子类通过方法覆盖来修改,此时使用final来修饰,模板方法设计模式

    ② 在构造器中,调用的方法(初始化方法),此时一般使用final修饰

    3. final 修饰变量:(常量)

    final修饰的变量表示最终的变量,常量 该变量只能赋值一次,不能再赋值。一旦定义了final变量并在首次为其显示初始化后,final修饰的变量值不可被改变。

    这里需要注意以下几个问题:

    1. final修饰的变量,无论是类属性、对象属性、形参还是局部变量,这些变量都是需要进行显示初始化(即为其显示指定初始值)。系统不会为final字段初始化

    2.对于final修饰的形参,由于是实参传递过来的,很好理解。

    3.对于final修饰的局部变量,与未用final修饰的变量一样,都是需要显示初始化。即局部变量都是需要显示初始化的。

    常量名规范:常量名符合标识符,单词全部使用大写字母,如果多个单词组成,单词间使用下划线隔开(例:MAX_ARRAYS)

    什么时候使用final修饰变量?

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

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

    对于一般的类属性和对象属性,由类和对象的初始化过程中可以看出,首先都进行了默认初始化。然后对有显示赋值的变量才再进行显示初始化。

    但对final修饰的类属性和对象属性而言,如果不显示初始化,其默认将是进行默认初始化后的值,这与final本身出发点矛盾,因此,Java语法规定:

    final修饰的类属性和变量属性必须要进行显示初始化赋值。

    另外,无论对于基本数据类型还是引用数据类型,final修饰的变量都是首次显示初始化后值都不能修改。对于基本数据类型,很好理解。对于引用

    数据类型,引用变量指向的是实际的对象,但其存储的是所指向对象的地址,因此,其值不能修改并不意味着其所指向的对象不能修改。

     

  • 相关阅读:
    为MYSQL加注释--mysql注释符
    基于SSM3框架FreeMarker自定义指令(标签)实现
    SpringMVC工作原理
    Web系统从Oracle迁移至MySQL
    Memcached集群/分布式/高可用 及 Magent缓存代理搭建过程 详解
    深入理解SQL的四种连接-左外连接、右外连接、内连接、全连接
    MySQL存储引擎
    mysql常用函数
    转:FIFO的定义与作用
    转:memset用法详解
  • 原文地址:https://www.cnblogs.com/it-xiaoBai/p/8080264.html
Copyright © 2011-2022 走看看