欢迎学习 Java 基础文章系列之 final 关键字

  • final 代表什么意思?

    • final 通常是指无法被改变或者不能被改变的,什么情况下不想被改变呢?

      • 不想改变可能有两种原因:设计或者效率。
  • 在Java中 final 关键字会在哪几个地方使用到?
    • 有三种地方使用:数据(成员变量、参数)、方法、类。

      • final 数据(成员变量、参数)

        常量以关键 final 表示,必须是基本数据类型。

        对于基本类型使数值恒定不变,而用于对象引用,使引用恒定不变,一旦引用被初始化指向一个对象,就无法改为指向另一个对象,然而对象其自身却是可以被修改的,Java 并未提供使任何对象恒定不变的途径(但是可以自己编写类已取得是对象恒定不变的效果),这一限制同样适用于数组,它也是对象。

        • 空白 final

          Java 允许生成:“空白 final”,即被声明为 final 但又未给定初始值的域。
        • final 参数

          Java中允许在参数列表中以声明的方式将参数指明为 final。无法在方法中更改参数引用所指向的对象。

          你可以读取参数,但却无法修改参数,这一特性主要用来向匿名类传递数据。
      • final 方法

        final 方法的考虑:出于对设计的考虑:确保在继承中使方法行为保持不变,并且不会被覆盖,或者出于效率(遭受劝退了)。

        该方法不会被重写(覆盖、覆写)。

        final 和 private 关键字

        类中所有的 private 方法都是隐式地指定为 final 的。由于无法使用 private 声明的方法,所以也就无法重写该方法。

        如果试图重写一个 private 方法(隐含式的 final),似乎是可行的,并且编译器也不会提示错误。

        “重写(覆盖、覆写)”只有在某方法是父类的接口(非interface)的一部分时才会出现。

        final修饰的方法在特定的访问权限下可以被继承。

        这是因为,方法是否被final修饰与方法的访问权限是两回事,没有任何关系,被final修饰的方法和未被final修饰的方法都可以自由的指定访问权限。

        我们有兴趣去谈论final关键字和访问权限关键字在修饰方法的过程的起到的作用,如下表(声明:final和访问权限是两个独立的概念,没有任何比较意义,所有本表仅方便读者理解,不可作为正统知识)
protect关键字 final关键字 private关键字
是否可以继承
是否可以重写
小结 private < final < protect (仅适用于方法)

正如上表所示,private实现了final方法不可重写的功能,并附加不可继承功能。(再次声明:final和访问权限是两个独立的概念,没有任何比较意义,所有上表仅方便读者理解,不可作为正统知识)可以对private方法添加final关键字,但是这种做法没有任何意义。

	* final 类

final 类的考虑:对该类的设计永不需要做任何变动,或者出于安全的考虑不希望它有子类。

该类不能被继承,final 类中所有的方法都是隐式指定为 final 关键字的。

Java 关键字之 final的更多相关文章

  1. [JAVA关键字] static & final

    JAVA十分常见的关键字static & final 总的来说final表示常量,即不可更改的:而static表示静态,即全局的 1. final 类:不能被继承 2. final 方法:能被 ...

  2. Java关键字(四)——final

    对于Java中的 final 关键字,我们首先可以从字面意思上去理解,百度翻译显示如下: 也就是说 final 英文意思表示是最后的,不可更改的.那么对应在 Java 中也是表达这样的意思,可以用 f ...

  3. java关键字之final

    final表示不能修改. final修饰的方法不能被重写, final修饰的类不能被继承并且类里的所有方法都是final,成员变量可以是final或者不是final. final修饰的成员变量不可以改 ...

  4. Java 关键字static final使用总结

    Static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,被static修饰的成员变量和成员方法独立于该类的任何对象.也就是说,它不依赖类特定的实例,被 ...

  5. Java关键字final、static

    一.final根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类.非抽象类成员方法和变量.你可能出于两种理解而需要阻止改变:设计或效率. final ...

  6. 浅析Java中的final关键字(转载)

    自http://www.cnblogs.com/dolphin0520/p/3736238.html转载 一.final关键字的基本用法 在Java中,final关键字可以用来修饰类.方法和变量(包括 ...

  7. java关键字extends(继承)、Supe(父类引用空间)、 This(方法调用者对象)、Instanceof(实例类型-判断对象是否属于某个类)、final(最终)、abstract(抽象) 、interface(接口)0

    java 继承使用关键字extends   继承的作用:减少代码量,优化代码 继承的使用注意点: 1子类不能继承父类的私有变量 2.子类不能继承父类的构造方法 3.子类在调用自己的构造方法时 会默认调 ...

  8. java笔记——Java关键字static、final使用小结

    static  1. static变量     按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量:另一种是没有被static修饰的变量,叫实例变量.两者的 ...

  9. 关于Java中的final关键字

    Java中的final关键字是用来限制用户行为的,说白了,就是用来限制我们这些程序员的.final可以用来修饰:变量.方法.类. 1)Java final variable final用来修饰变量时, ...

随机推荐

  1. 关于Servlet

    Servlet与CGI CGI(Common Gateway Interface),早期的Web服务器技术.执行模式:将服务端的资源基于进程运行. Servlet:运行模式改为单进程多线程的形式,利用 ...

  2. Spring动态代理的生成-如何判断是使用JDK动态代理还是CGlib代理

    前言 在上一篇文章中讲到了Spring是如何获取对应的Bean的增强,然后本次主要讲解一下Spring如何在获取到增强后创建Spring代理的. 在步入正题之前先给大家看一下Spring创建代理的大致 ...

  3. css3新增文本属性

    css3新增属性 边框属性 背景属性 文本属性 颜色属性 文本属性 属性 说明 text-shadow 为文字添加阴影 box-shadow 在元素的框架上添加阴影效果 text-overflow 确 ...

  4. modal框

    modal框 创建modal款的基本"框架": 1 <body> 2 <!--1.触发模态框的按钮--> 3 <button class=" ...

  5. Android QMUI实战:实现APP换肤功能,并自动适配手机深色模式

    Android换肤功能已不是什么新鲜事了,市面上有很多第三方的换肤库和实现方案. 之所以选择腾讯的QMUI库来演示APP的换肤功能,主要原因: 1.换肤功能的实现过程较简单.容易理解: 2.能轻松适配 ...

  6. 听说,99% 的 Go 程序员都被 defer 坑过

    原文链接: 听说,99% 的 Go 程序员都被 defer 坑过 先声明:我被坑过. 之前写 Go 专栏时,写过一篇文章:Go 专栏|错误处理:defer,panic 和 recover.有小伙伴留言 ...

  7. 内网渗透DC-4靶场通关

    个人博客:点我 DC系列共9个靶场,本次来试玩一下DC-4,只有一个flag,下载地址. 下载下来后是 .ova 格式,建议使用vitualbox进行搭建,vmware可能存在兼容性问题.靶场推荐使用 ...

  8. JVM详解(六)——对象的实例化、内存布局与访问定位

    一.对象的实例化 1.创建对象的方式 2.创建对象的步骤 脑图:https://www.processon.com/view/link/61701a927d9c087040525226 3.对象属性赋 ...

  9. Less-23 preg_replace1

    Less-23: 直接跳到Less-23的原因是,Less-(11~22)均为注入点不为get方式的注入.我先把get型注入写的差不多,再回来整理关于注入点的内容. 核心语句: 查询.报错均有回显. ...

  10. 【Java虚拟机2】Java类加载机制

    前言 JAVA代码经过编译从源码变为字节码,字节码可以被JVM解读,使得JVM屏蔽了语言级别的限制.才有了现在的kotlin.Scala.Clojure.Groovy等语言. 字节码文件中描述了类的各 ...