​ 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关键字,但这不会增添任何意义。

java基础篇 之 final关键字的更多相关文章

  1. JAVA基础学习之final关键字、遍历集合、日期类对象的使用、Math类对象的使用、Runtime类对象的使用、时间对象Date(两个日期相减)(5)

    1.final关键字和.net中的const关键字一样,是常量的修饰符,但是final还可以修饰类.方法.写法规范:常量所有字母都大写,多个单词中间用 "_"连接. 2.遍历集合A ...

  2. java基础学习之final关键字

    final可以修饰类.方法.变量,一旦使用了final则将不能改变被修饰的对象的引用; 被final修饰的类不可以被继承 被final修饰的方法不可以被覆盖 被final修饰的变量一般为常量,只允许对 ...

  3. java基础篇 之 super关键字的理解

    ​ 之前一直认为,super指向的是父类对象.到今天,仔细查询了资料,自己做了实验,确认这个结论是不对的.我们分一下几个点讨论下: super的作用: 第一种:用来访问父类被隐藏的成员变量 第二种:用 ...

  4. 小白—职场之Java基础篇

    java基础篇 java基础 目录 1.java是一种什么语言,jdk,jre,jvm三者的区别 2.java 1.5之后的三大版本 3.java跨平台及其原理 4.java 语言的特点 5.什么是字 ...

  5. java基础篇1

    JAVA基础篇1 注释 单行注释 //这是一个单行注释,由两个斜杠组成,不能嵌套多行注释 多行注释 /*这是一个 多行注释 ,//里面不能嵌套多行注释, 但是可以嵌套单行注释*/ 文档注释 /**ja ...

  6. Java基础篇(JVM)——类加载机制

    这是Java基础篇(JVM)的第二篇文章,紧接着上一篇字节码详解,这篇我们来详解Java的类加载机制,也就是如何把字节码代表的类信息加载进入内存中. 我们知道,不管是根据类新建对象,还是直接使用类变量 ...

  7. Java基础篇(JVM)——字节码详解

    这是Java基础篇(JVM)的第一篇文章,本来想先说说Java类加载机制的,后来想想,JVM的作用是加载编译器编译好的字节码,并解释成机器码,那么首先应该了解字节码,然后再谈加载字节码的类加载机制似乎 ...

  8. java基础篇---I/O技术(三)

    接上一篇java基础篇---I/O技术(二) Java对象的序列化和反序列化 什么叫对象的序列化和反序列化 要想完成对象的输入或输出,还必须依靠对象输出流(ObjectOutputStream)和对象 ...

  9. java基础篇---I/O技术

    java基础篇---I/O技术   对于任何程序设计语言而言,输入输出(I/O)系统都是比较复杂的而且还是比较核心的.在java.io.包中提供了相关的API. java中流的概念划分 流的方向: 输 ...

随机推荐

  1. java的图形化界面 文本区JTextArea的程序例子

    package java1;     //使用时这个改成你的包名即可//文本区 JTextArea import javax.swing.*;import java.awt.*;import java ...

  2. 津津的储蓄计划 NOIp提高组2004

    这个题目当年困扰了我许久,现在来反思一下 本文为博客园ShyButHandsome的原创作品,转载请注明出处 右边有目录,方便快速浏览 题目描述 津津的零花钱一直都是自己管理.每个月的月初妈妈给津津\ ...

  3. SpeedButton

    SpeedButton是一个图形控件,本身没有句柄.因此它不能具有焦点.你可以使用TBitBtn,调整一些属性,可以使他们的外形很接近. 只有从TWinControl派生的控件,才具有Handle.你 ...

  4. Daily Scrum 1/6/2015

    Process: Zhaoyang: Complete the speech API test and do some UI upgrade. Yandong: Help zhaoyang to do ...

  5. Video tagging systems based on DNNs

    Need: With the ever-growth large-scale video in the mobile phone, so what will everyone get from the ...

  6. python selenium模块 css定位

    selenium是python的非标准库,使用时需要下载安装 安装命令  pip install selenium selenium是python的自动化测试模块,可以模拟浏览器的行为 所以在使用之前 ...

  7. pytorch Model Linear实现线性回归CUDA版本

    实验代码 import torch import torch.nn as nn #y = wx + b class MyModel(nn.Module): def __init__(self): su ...

  8. ubuntu17.10安装lnmp安装包的核心问题-gcc版本、g++版本

    大致碰到的问题都是这样,不是php安装失败,就是MySQL安装失败,或者Nginx也安装失败 基本上是花式报错.后来在军哥的论坛中找到了这个帖子:https://bbs.vpser.net/viewt ...

  9. 杂园日记-获取URL参数

    function getUrlParams(name, url){ var locationUrl = window.location.search; if(url){ var s =url.inde ...

  10. 隐藏响应中的server和X-Powered-By

    来源:https://www.yduba.com/biancheng-7831560074.html 有时候,我们用调试工具查看别人的网站时,经常看到 X-Powered-By:PHP/7.1.8 这 ...