static 和final

static  静态修饰关键字,可以修饰 变量,程序块,类的方法;

 当你定义一个static的变量的时候jvm会将将其分配在内存堆上,所有程序对它的引用都会指向这一个地址而不会重新分配内存;

修饰一个程序块的时候(也就是直接将代码写在static{...}中)时候,虚拟机就会优先加载静态块中代码,这主要用于系统初始化;当修饰一个类方法时候你就可以直接通过类来调用而不需要新建对象。

final 只能赋值一次;修饰变量、方法及类,当你定义一个final变量时,jvm会将其分配到常量池中,程序不可改变其值;当你定义一个方法时,改方法在子类中将不能被重写;当你修饰一个类时,该类不能被继承。

static和final使用范围:类、方法、变量。

2.区别和联系:

2.1.static 含义:静态的,被 static 修饰的方法和属性只属于类不属于类的任何对象。2.2.static 用法:2.2.1.static 可以修饰【内部类】、方法和成员变量。2.2.2.static【不可以修饰外部类】、【不可以修饰局部变量】(因为 static 本身就是定义为类级别的,所以局部级别的变量是不可以用 static 修饰的)。

2.3 final 含义:【只能赋值一次】的。2.2.final 用法:2.2.1.final 修饰属性,表示属性【只能赋值一次】,(1)基本类型:值不能被修改;(2)引用类型:引用不可以被修改该。2.2.2.final 修饰方法,表示方法不可以重写,但是可以被子类访问(如果方法不是 private 类型话)。2.2.2.final 修饰类,表示类不可以被继承。

3.联合使用 static final

3.1.适用范围:

3.1.2.两者范围的交集,所以只能修饰:成员变量、方法、内部类。

3.2.含义:也是二者交集:3.2.1.方法:属于类的方法且不可以被重写。3.2.2.成员变量:属于类的变量且只能赋值一次。3.2.3.内部类:属于外部类,且不能被继承

transient 类型修饰符,只能用来修饰字段,如果用transient声明一个实例变量,当对象存储时,它的值不需要维持。换句话来说就是,用transient关键字标记的成员变量不参与序列化过程。

volatile
volatile也是变量修饰符,只能用来修饰变量。volatile修饰的成员变量在每次被线程访问时,都强迫从共享内存中重读该成员变量的值。而且,当成员变量发生变化时,强迫线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。

在此解释一下Java的内存机制:

Java使用一个主内存来保存变量当前值,而每个线程则有其独立的工作内存。线程访问变量的时候会将变量的值拷贝到自己的工作内存中,这样,当线程对自己工作内存中的变量进行操作之后,就造成了工作内存中的变量拷贝的值与主内存中的变量值不同。

Java语言规范中指出:为了获得最佳速度,允许线程保存共享成员变量的私有拷贝,而且只当线程进入或者离开同步代码块时才与共享成员变量的原始值对比。

这样当多个线程同时与某个对象交互时,就必须要注意到要让线程及时的得到共享成员变量的变化。

而volatile关键字就是提示VM:对于这个成员变量不能保存它的私有拷贝,而应直接与共享成员变量交互。

使用建议:在两个或者更多的线程访问的成员变量上使用volatile。当要访问的变量已在synchronized代码块中,或者为常量时,不必使用。

由于使用volatile屏蔽掉了VM中必要的代码优化,所以在效率上比较低,因此一定在必要时才使用此关键字。

转载于:https://www.cnblogs.com/aijavaa/p/6479374.html

final 和static的关系相关推荐

  1. java基础_笔记(dos,java基础信息,final,static,abstract,接口,抽象类,数组,排序string,stringbuff/stringbuilder)

    一,基础部分 1.1dos命令(也就是cmd命令) exit退出当前dos命令窗口 cls清屏 在dos中复制:直接复制 dir:显示子文件 cd改变目录,切换盘符的直接输入盘符不用cd,不可以跨盘符 ...

  2. [转] Java中public,private,final,static等概念的解读

    作为刚入门Java的小白,对于public,private,final,static等概念总是搞不清楚,到底都代表着什么,这里做一个简单的梳理,和大家分享,若有错误请指正,谢谢~ 访问权限修饰符 pu ...

  3. Java final、static final 讲解

    final 与 static 的定义度娘遍地都是,这里就不再多嘴了. final:常量 ,用了它,这个东西就不能二次修改了 static: 静态变量,在类加载的时候就会被初始化 static fina ...

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

    Java关键字final.static使用总结 一.final 根据程序上下文环境,Java关键字final有"这是无法改变的"或者"终态的"含义,它可以修饰非 ...

  5. JAVA基础--final、static区别以及类加载顺序

    一.JAVA中final 与 static 总结 final static 修饰类 该类不可被继承 只能修饰内部类,该类不需要new,是静态加载(嵌套顶层类) 修饰接口 × × 修饰构造函数 × × ...

  6. java final内存机制_Java中的内存处理机制和final、static、final static总结

    装载自:http://blog.csdn.net/wqthaha/article/details/20923579 Java程序运行在JVM上,可以把JVM理解成Java程序和操作系统之间的桥梁,JV ...

  7. java final static_Java基础之final、static关键字

    一.前言 关于这两个关键字,应该是在开发工作中比较常见的,使用频率上来说也比较高.接口中.常量.静态方法等等.但是,使用频繁却不代表一定是能够清晰明白的了解,能说出个子丑演卯来.下面,对这两个关键字的 ...

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

    java中static.final 和 static final之间的区别 static可以修饰:全局属性,方法,代码块,内部类(静态内部类或嵌套内部类) 由于静态属性和方法是属于该类的所有对象的,所 ...

  9. java中的Static、final、Static final各种用法

    前言 对Static.final.Static final这几个关键词熟悉又陌生? static 加载:static在类加载时初始化(加载)完成 含义:Static意为静态的,但凡被static 修饰 ...

最新文章

  1. (C++)1012 数字分类
  2. centos php 开启libgdgd_Linux下开启PHP GD库支持
  3. Java接口存在的意义以及如何解决菱形继承问题
  4. oracle每天自增长,oracle的自增长
  5. Prometheus 序章/第一/二讲
  6. Jfreechart柱形图设置数值显示
  7. 如何建立双机热备系统
  8. Java基础篇(05):函数式编程概念和应用
  9. Ubuntu 16.04 - 64bit 解压 rar 报错 Parsing Filters not supported
  10. 开发者应该关注的五项Web新兴技术:WebGL和SVG名列其中
  11. 在Java代码(非JSP及Action,Servlet,Controller)中获得WebRoot的物理路径
  12. git报错error: src refspec refs/heads/master does not match any.
  13. activiti高亮显示图片_Excel全自动甘特图,工作进度显示,极简设计快手套用
  14. WINDOWS BAT的命令,双引号位置要注意
  15. 台式计算机调亮度快捷键,台式电脑怎么调亮度快捷键(显示器亮度的调节方法)...
  16. Ax=b解,向量空间的基、维度(Part IV)
  17. DedeCMS二次开发 - 文件结构了解
  18. 保研复习——线性代数3:矩阵的秩与线性方程组
  19. uni保存canvas图片_UniApp 用canvas生成图片保存本地
  20. 银保监会计算机类专业知识,国家公务员局2019中国银保监会国考内容:计算机类专业知识...

热门文章

  1. springmvc java的验证码的小程序
  2. poi实现excel数据导入数据库
  3. JavaScript的函数声明与函数表达式的区别
  4. 安装sendmail
  5. 多少像素才合适 网页设计标准尺寸大讲解
  6. phpMyAdmin ‘tbl_gis_visualization.php’多个跨站脚本漏洞
  7. 诗与远方:无题(十七)
  8. Spring Boot 介绍、入门
  9. null对象访问static属性或方法
  10. SpringBoot实战:整合Redis、mybatis,封装RedisUtils工具类等(附源码)