在我们上一篇博文中提到了 fianl 这个关键字,对于这个关键字,本人在初学时也耗费了极大地心血,甚至和师兄进行了激烈的讨论,并且,在我们讨论、尝试 以及 翻阅各种资料,最终得出了合适、易懂的解释。

现在,本人来介绍一下final这个关键字:

final :

首先,本人来解答一下同学们现在心中可能有的疑惑——为什么会有final呢?

由于继承中有一个覆盖(方法重写)的现象(相关知识点在本人《详解 方法的覆盖 —— toString() 与 equals()的覆盖》)中进行详细讲解,而有时候我们不想让子类去“覆盖”父类的方法.这对这种情况java就给我们提供了一个关键字: final

那么,现在本人来介绍下使用这个关键字修饰的特点吧:

final修饰特点:

修饰: 被修饰类不能被继承

修饰方法: 被修饰的方法不能被重写

修饰变量

  1. 仅在 编译时 被赋初值,并在之后永不改变 的 常量
  2. 在定义这种常量的时候,就必须对其赋值。因为fianl类型的变量,在构造方法时并不会被赋初值,所以我们在定义final类型变量时,要手动给其赋初值,否则会不能进行编译
  3. 对于对象的引用,fianl 关键字使得引用恒定不变。一旦引用被初始化指向一个对象,就无法再把它改为指向另一个对象。

    但是,对象本身是可以被修改的,JAVA并没有提供使任何对象恒定不变的途径。

    (这一限制同样适用数组,因为数组也是对象)

对于“引用”这一概念,可以理解为对象的“指针”,但是是有所差异的,同学们不用着急,在本人之后的博文中会对这个知识点进行使用和讲解。

而我们在学习SE的阶段一般都是用final来修饰变量,在我们使用final关键字来修饰变量时,它的功能相当于我们在C语言中的“”,主要目的是 避免出现“神仙代码”,使代码逻辑清晰

那么,现在,本人来介绍一下 static关键字吧。

static:

关于这个关键字,我们并不陌生,因为它在这里的 名称 和在C语言中一样,用static关键字修的成员 被称为 静态成员。

现在,本人来介绍下 static关键字的特点

  1. 随着类的加载而加载

    静态成员 在 JVM对类加载时,就被申请了空间。这也就是说,在一个类还没有被实例化的对象前,就已经申请好了静态成员的空间了;
  2. 被类的所有对象共享

    静态成员不是 “私有财产” ,同一个静态成员在所有该类的对象中是同一个空间;
  3. 静态方法不能引用 非静态成员 和 非静态方法

    但是,非静态方法可以调用静态成员 和 静态方法;
  4. 可以通过类名调用

    静态成员 和 静态方法 一般通过如下方式被调用:

    (1)类名称.静态成员;

    (2)类名称.静态方法();
  5. 静态方法中 不允许出现 this

    这是由于:

    静态是随着类的加载而加载,this是随着对象的创建而存在。

    静态比对象先存在。故我们不能在静态方法中出现this

那么,有static关键字修饰的变量的特点就讲解完了,现在本人来讲解下 局部变量类的非静态成员类的静态成员 之间的区别吧:

静态变量和成员变量的区别:

  1. 内存中位置不同

    静态变量 存储于 方法区的静态区

    成员变量 存储于 堆内存
  2. 所属不同

    静态变量 属于 ,所以也称为类变量

    成员变量 属于 对象,所以也称为实例变量(对象变量)
  3. 内存出现时间不同

    静态变量 随着类的加载而加载,随着类的消失而消失

    成员变量 随着对象的创建而存在,随着对象的消失而消失
  4. 调用不同

    静态变量 可以通过类名调用,也可以通过对象调用,推荐使用类名调用

    成员变量 只能通过对象名调用

在最后的最后,本人来总结一下:

  • final关键字保证的是 该空间的值不可更改,且只能在该类内的方法被调用;
  • static关键字保证的是 该空间的值预先赋值好了,且可以在该项目下任意位置使用

详解 final 和 static的更多相关文章

  1. [C/C++] extern关键字详解以及与static、const区别

    extern用法详解: 1. 声明外部实体 声明外部全局变量或对象,一般用于头文件中,表示在其它编译单元内定义的变量,链接时进行外部链接,如: extern int ivalue; 此时的extern ...

  2. 详解详解Java中static关键字和final关键字的功能

    摘要:static关键字和final关键字是Java语言的核心,深入理解他们的功能非常重要. 本文分享自华为云社区<Java: static关键字与final关键字>,原文作者:唐里 . ...

  3. Java之static静态关键字详解|final关键字详解

    前言 在Java语言中,static表示"静态"的意思,使用场景可以用来修饰成员变量和成员方法,当然也可以是静态代码块.static的主要作用在于创建独立于具体对象的域变量或者方法 ...

  4. java详解final、多态、抽象类、接口原理

    1:final关键字(掌握) (1)是最终的意思,可以修饰类,方法,变量. (2)特点: A:它修饰的类,不能被继承. B:它修饰的方法,不能被重写. C:它修饰的变量,是一个常量. (3)面试相关: ...

  5. Java之Static静态修饰符详解

    Java之Static静态修饰符详解 Java之Static静态修饰符详解 一.特点 1.随着类的加载而加载,随着类的消失而消失,生命周期最长 2.优先于对象存在 3.被所有类的对象共享 4.可以直接 ...

  6. 2020了你还不会Java8新特性?(五)收集器比较器用法详解及源码剖析

    收集器用法详解与多级分组和分区 为什么在collectors类中定义一个静态内部类? static class CollectorImpl<T, A, R> implements Coll ...

  7. Spring IoC getBean 方法详解

    前言 本篇文章主要介绍 Spring IoC 容器 getBean() 方法. 下图是一个大致的流程图: 正文 首先定义一个简单的 POJO,如下: public class User { priva ...

  8. java 关键字final static native详解

    java 关键字native static final详解 一.final 根据程序上下文环境,Java关键字final有"这是无法改变的"或者"终态的"含义, ...

  9. abstract关键字、final关键字、static关键字、访问修饰符详解

     abstract关键字.final关键字.static关键字.访问修饰符详解 abstract关键字: final关键字: static关键字: 访问修饰符:

随机推荐

  1. 企业级自动化部署方案——ansible实现tomcat自动安装和配置

    共耗时10多个小时 思路一 总体设计 ansible-playbook目录结构 [root@ansible ~]# tree /etc/ansible/roles/tomcat /etc/ansibl ...

  2. flume面试题

    1 你是如何实现Flume数据传输的监控的使用第三方框架Ganglia实时监控Flume. 2 Flume的Source,Sink,Channel的作用?你们Source是什么类型?1.作用 (1)S ...

  3. 特征选择与稀疏学习(Feature Selection and Sparse Learning)

    本博客是针对周志华教授所著<机器学习>的"第11章 特征选择与稀疏学习"部分内容的学习笔记. 在实际使用机器学习算法的过程中,往往在特征选择这一块是一个比较让人模棱两可 ...

  4. java并发安全

    本次内容主要线程的安全性.死锁相关知识点. 1.什么是线程安全性 1.1 线程安全定义  前面使用8个篇幅讲到了Java并发编程的知识,那么我们有没有想过什么是线程的安全性?在<Java并发编程 ...

  5. Jmeter接口测试之案例实战(十一)

    在前面的知识体系中详细的介绍了Jmeter测试工具在接口自动化测试中的基础知识,那么今天更新的文章主要是对昨晚的上课内容做个总结. 首先来看Jmeter测试工具在图片上传中的案例应用.首先结合互联网产 ...

  6. JVM 调优工具

    JMeter  LoadRunner  压力测试工具 JConsole  是一个内置 Java 性能分析器,可以查看内存,线程,类,CPU 等的使用情况,可以通过线程去查看线程的试用情况,死锁可以被检 ...

  7. el-table分页展示数据

    <el-table :data="tableData.slice((currentPage-1)*pageSize,currentPage*pageSize)" :show- ...

  8. Codeforces Global Round 7

    A. Bad Ugly Numbers 思路 题意: 给我们一个k,让我们用 0-9 之间的数字构成一个 k位数a,a不能被组成a的每一位数字整除. 分析:首先 k等于1,无论我们怎么配都会被整除:当 ...

  9. 001_Chrome 76支持原生HTML 图片懒加载Lazy loading

    Table Of Content 什么是懒加载? 语法参数及使用方式? 有哪些特点? 与js有关的实践 什么是懒加载? 技术背景 Web应用需要经常向后台服务器请求资源(通过查询数据库,是非常耗时耗资 ...

  10. 如何优雅的将文件转换为字符串(环绕执行模式&行为参数化&函数式接口|Lambda表达式)

    首先我们讲几个概念: 环绕执行模式: 简单的讲,就是对于OI,JDBC等类似资源,在用完之后需要关闭的,资源处理时常见的一个模式是打开一个资源,做一些处理,然后关闭资源,这个设置和清理阶段类似,并且会 ...