java中static、final 和 static final之间的区别

static可以修饰:全局属性,方法,代码块,内部类(静态内部类或嵌套内部类)

由于静态属性和方法是属于该类的所有对象的,所以可以用类名.静态属性/方法名来访问。用static修饰的代码块表示静态代码块,当Java虚拟机(JVM)加载类时,就会执行该代码块。 1.被static修饰的变量,叫静态变量或类变量(不能是局部变量),直接可以用类名调用;被static修饰的变量,叫实例变量,必须实例化对象以后调用;static修饰的变量可以被修改. 2.静态方法可以直接通过类名调用,任何的实例也都可以调用,因此静态方法中不能用this和super关键字,也不能直接访问所属类的实例变量和实例方法(非static的成员变量和成员成员方法),只能访问所属类的静态成员变量和成员方法。 3.父子类中,静态方法只能被静态方法覆盖,父子类中,非静态方法只能被非静态方法覆盖。 常见的java中的main方法必须有static修饰,因为在类加载时无法创建对象,静态方法可以不通过对象调用,所以在类的main方法所在在类加载时就可以通过main方法入口来运行程序。 4.static代码块也叫静态代码块,是在类中独立于类成员的static语句块,可以有多个,位置可以随便放,它不在任何的方法体内,JVM加载类时会执行这些静态的代码块,如果static代码块有多个,JVM将按照它们在类中出现的先后顺序依次执行它们,每个代码块只会被执行一次。

final可以修饰:方法,类,局部变量

对于基本类型数据,final会将值变为一个常量,创建后不能被修改;但是对于对象句柄(亦可称作引用或者指针),final会将句柄变为一个常数(进行声明时,必须将句柄初始化到一个具体的对象。而且不能再将句柄指向另一个对象。但是,对象的本身是可以修改的。这一限制也适用于数组,数组也属于对象,数组本身也是可以修改的。方法参数中的final句柄,意味着在该方法内部,我们不能改变参数句柄指向的实际东西,也就是说在方法内部不能给形参句柄再另外赋值)。 1.final修饰的变量就会变成常量,而且应当大写,一旦赋值不能改变,final的常量不会有默认初始值,对于直接在初始化赋值时final修饰符常和static修饰符一起使用。 2.final修饰的方法将不能被其子类覆盖重写。 3.final修饰的类类将不能被继承,且final类中的方法也都是final的, final不能用来修饰构造方法,在父类中如果有常量属性,在子类中使用常量属性时是不会进行父类的类加载。

static final和final static

没什么区别,一般static写在前面,既具有static属性又具有final属性的类/方法/变量。

JAVA中static与final与static final关键字的简述

static:强调唯一性,它的使用无需建立对象,也就是一个类中所有static修饰的量或方法就是唯一的,对象的不同不会影响到他,甚至不建立对象都可以使用static修饰的量或方法。所以声明时必须初始化!!!!static只能修饰内部类,修饰以后的内部类可以像普通外部类一样调用。

final:强调不变性,但是必须建立对象才能调用,随着对象的不同,final修饰的量也可以不同,所以他的初始化可以在声明时进行,也可以在构造函数中进行,当然他修饰的类不可以继承,修饰的量不可以改变。

static final:结合上述两者特性,使用无需实例化,声明必须初始化。

Java中static、final、static final的区别和使用

一. final

  1. final类不能被继承,类中的方法默认是final;
  2. final方法不能被覆盖,但可以被继承,就是不可修改的意思;
  3. final成员变量表示常量,表示一但赋值就不能被修改;
  4. final不能用于修饰构造函数;
  5. private修饰的方法默认是final的,即不能被覆盖。

注意:final变量定义的时候,可以先声明,而不给初值,这中变量也称为final空白,无论什么情况,编译器都确保空白final在使用之前必须被初始化。

二、static

注意: static表示“全局”或者“静态”的意思,用来修饰成员变量或者方法,也可以形成静态的static的代码块,但是Java中没有全局变量的概念。

详细讲解: 被static修饰的成员变量或者方法独立于该类的任何对象。也就是说,它不依赖于类特定的实例,被类的所有实例共享。只要这个类被加载,Java虚拟机就可以根据类名在运行时数据区的方法区内找到他们

因此,static对象可以在他的任何对象创建之前访问,无需引用任何对象,当声明其他类的对象时,不生成static变量的副本,而是类的所有实例共享同一个static变量。

三、static final

注意: static final用来修饰的成员变量和成员方法,可以理解为“全局变量”。

  1. 对于变量,表示一旦赋值就不可以修改,并且通过类名可以访问;
  2. 对于方法,表示不可覆盖,并且可以通过类名直接访问。
  3. 对于被static final修饰的实例变量,实例本身不能再改变,但对于一些容器类型(比如:ArrayList、HashMap)的实例变量,不改变容器本身,但可以修改容器中的存放的对象

java中static、final 和 static final之间的区别相关推荐

  1. 解析java中方法的重载和重写之间的区别与联系

    解析java中方法的重载和重写之间的区别与联系 1 不同点 1.1 方法重写是在不同的类中(父子类),方法重载是在同一类中 1.2 方法重载最初的目的是构造方法的多样化,方法重写的目的是让重写的方法满 ...

  2. 面试题:Java中list、set、map之间的区别

    1.集合的体系 为什么要了解list.set.map呢? 答:我们在编写程序的过程中经常会对容器中的元素进行增删改查,那么如何快速又准 确的定位到你想访问到的元素呢?就不得不提到我们的常用的单列结合C ...

  3. Java中 List、Set、Map 之间的区别

      小博此篇记录了开发过程中常用的几种集合详解,三者的区别对比均从IDEA相关层次图里面所得知,基于JDK8,如有错误欢迎批评指正. List(列表)   List的元素以线性方式存储,可以存放重复对 ...

  4. java 两日期的周数_利用 Java 中 Calendar 计算两个日期之间的天数和周数

    利用 Java 中 Calendar 计算两个日期之间的天数和周数 前言 究竟什么是一个 Calendar 呢? 中文的翻译就是日历, 那我们立刻可以想到我们生活中有阳 (公) 历阴 (农) 历之分它 ...

  5. java堆和栈 常量池_GitHub - han-guang-xue/difference-of-stack-heap-pool: Java中堆、栈和常量池的区别...

    Java中堆.栈和常量池的区别 栈 堆 常量池的概念 首先我们先了解一下概念,Java把内存分成两种,一种叫做栈内存,一种叫做堆内存. 栈内存 存放基本类型的变量数据和对象类型的引用(请注意存放的是引 ...

  6. java中list,set,map集合的区别,及面试要点

    Map集合:链接: Map集合的五种遍历方式及Treemap方法 Set集合:链接: Java中遍历Set集合的三种方法 TreeSet集合:链接: Java深入了解TreeSet,和迭代器遍历方法 ...

  7. java和python的web自动化有什么区别-Java Web开发和Python Web开发之间的区别

    今天的文章讨论了Java Web开发和Python Web开发之间的区别.我不鼓励我们在这里从Java Web迁移到Python Web开发.我只是想谈谈我的感受.它不一定适合所有情况,仅供我们参考. ...

  8. Java中,一切皆是对象——java中的对象类型与基本数据类型的区别

    起因:取一个list给另一个list赋值,然后在另一个list中取出进行修改.list其中类型为对象时,String时,基本数据类型时. [java中的对象类型与基本数据类型的区别] #声明和实例化 ...

  9. java中的NIO和IO到底是什么区别?20个问题告诉你答案

    摘要:NIO即New IO,这个库是在JDK1.4中才引入的.NIO和IO有相同的作用和目的,但实现方式不同,NIO主要用到的是块,所以NIO的效率要比IO高很多. 本文分享自华为云社区<jav ...

  10. IO多路复用中select、poll、epoll之间的区别

    本文来说下IO多路复用中select.poll.epoll之间的区别 文章目录 什么是IO多路复用 为什么有IO多路复用机制 同步阻塞(BIO) 同步非阻塞(NIO) IO多路复用(现在的做法) 3种 ...

最新文章

  1. c语言r5够用吗,泡菜说 普通人有必要买R5吗?
  2. mysql union查询_一本彻底搞懂MySQL索引优化EXPLAIN百科全书
  3. Linux操作系统ssh默认22端口修改方法
  4. 新版Edge浏览器弹出“ 禁用开发人员模式扩展 ”的解决方案
  5. boost::stl_interfaces模块实现重复字符迭代器的测试程序
  6. DTO(领域数据传输对象)是做什么的
  7. linux的initrd.img的解压和打包
  8. [luoguP3068] [USACO13JAN]派对邀请函Party Invitations(stl大乱交)
  9. 你一直想学的 RocketMQ,原来这样学才最省时省力
  10. JavaSE基础——GUI编程(Swing)
  11. 试题库管理系统毕业设计(毕业论文完整版从目录到总结)
  12. PyKDL---正运动学和逆运动学
  13. 计算机英语2000带英标
  14. java写入文件乱码问题_Java写入文件的乱码及解决
  15. 编程计算1 * 2 * 3+3 * 4 * 5+5 * 6 * 7+...+99 * 100 * 101的值。
  16. 代码块、if语句、if-else语句、switch语句、while循环、do-while循环、for循环——JS流程控制
  17. 统计学学习笔记:L1-总体、样本、均值、方差
  18. freeline使用指南
  19. 智慧幼儿园—助力幼儿园脱颖而出,快人一步
  20. Experiment(英语笔记)

热门文章

  1. 的write方法有哪些参数_向子进程传递大量数据的方法
  2. java 内存分布_一图看懂JVM内存分布,永久记住!
  3. java jar包示例_Java包getImplementationVersion()方法和示例
  4. PHP登录表单提交前端验证,form表单提交前先用ajax进行验证(前端)
  5. 互联网传真 传真指令_传真的完整形式是什么?
  6. 用贪婪算法解决背包问题_解决主要算法问题的贪婪策略
  7. 字节二面:优化 HTTPS 的手段,你知道几个?
  8. idea连接sqlserver及数据库操作
  9. 八、华为鸿蒙HarmonyOS应用开发之Java UI框架、常用TextField组件使用
  10. yolo 视频场景行为数据集