zoukankan      html  css  js  c++  java
  • java基础篇 之 final关键字

    ​ final,字面上是最终的意思,通常来说,我们用它来作为修饰符的时候,都是代表“这是无法改变的”的意思。不想改变可能出与两种理由:设计或效率。由于这两个原因相差甚远,所以我们在使用final关键字的时候很容易误用。

    ​ 主要从三个方面来讲

    1. final修饰变量
    2. final修饰方法
    3. final修饰类

    final修饰变量

    • 修饰基本数据类型

      当我们使用final修饰基本数据类型时,代表我们申明了一个编译时的常量,编译器会在编译时就将其代入到表达式中进行计算,减少了一些我们在运行时的负担

    • 修饰引用数据类型

      当我们使用final修饰引用数据类型时,代表了这个引用不能再被指向其它对象,但是对象自身是可变的。对于初学者来说,这一点总是让人感觉到迷惑,举个例子:我们新建一个对象final Person p = new Person(),当我们申明后,p只能指向我们new的这个person对象,我们不能将p再指向一个新new出来的对象,但是对于p所指向的person对象来说,这个对象是可变的,假设这个person类中存在属性age并存在对应的getter,setter方法,我们还是可以调用p.setAge(xxx),来改变这个对象的属性

    • 一个既是static又是final的域只占据一段不能改变的存储空间。我相信理解了上面亮点,这一点也不难理解。static修饰的属性,随着类的加载而加载,final修饰的数据,“不可改变”。这就代表着当类加载完后,对象还未创建时,我们就已经申明了一段”不可改变“的存储空间

    • 空白final。我们看下面这段代码:

      public class Person{
          private int age;
          private final String name;
          public Person(String name){
              this.name = name;
          }
      }
      

      我们可以看到,在声明final类型的name属性时,我们并没有对其进行初始化,但是编译也通过了,这是为什么呢?其实就是因为我们在Person类唯一的构造函数中完成了对final修饰的属性的初始化。同时这也意味着,如果我们在声明的时候,采用了空白final的方式,那么在所有的构造函数中我们都要对这个属性进行初始化。这也不难理解,我们申明了一个非静态的空白final属性,非静态,代表我们声明这个属性是为了给这个类的对象使用,final代表了这个对象中有一个不可变的属性,且这个属性必须在对象创建的时候就完成初始化。这样分析下来,只能是在构造函数的时候对这个属性进行初始化,为了保证所有的对象都是正常的,那么所有构造函数都必须完成对这个属性初始化的任务。

    final修饰方法

    • 我们在使用final修饰方法时,唯一目的就是将方法锁定,防止被子类复写,这是出与设计的目的。

    • private与final。

      首先来说,所有private的方法都会被隐式的指定为final,我们对一个private的方法采用final修饰符进行修饰是没有意义的。private的方法本身就无法被复写。这一点大家可以通过@Override注解去验证,我就不多解释了

    final修饰类

    我们在使用final修饰类时,代表了这个类不能被继承。由于final类禁止继承,所以final类中所有的方法都隐式指定为final的,因为无法覆盖它们。在final类中可以给方法添加final关键字,但这不会增添任何意义。

  • 相关阅读:
    javascript实现禁止右键和F12查看源代码
    网页头部meta标签
    apache多站点vhost.conf配置
    dedecms织梦(一)
    PHP开发微信公众号
    wordpress学习(五)----插件
    wordpress学习(四)---url伪静态简单了解
    wordpress学习(三)-----add_action动作钩子和add_filter()过滤器钩子
    wordpress学习(二)
    原生JS实现addClass,removeClass,toggleClass
  • 原文地址:https://www.cnblogs.com/daimzh/p/12854457.html
Copyright © 2011-2022 走看看