static:

static静态,可以修饰类,成员变量,成员方法,代码块。static修饰的成员变量和方法独立于该类的任何对象,也就是被类的所有成员共享,这要这个类被加载,虚拟机就能根据类名在运行时数据区的方法区找到他们。无需对象引用。static会将所有应用的属性,方法以及内部类直接产生引用关系,而并非与类的实例,这时为什么可以使用类名.方法名就能引用的原因。由static修饰的代码块在类被加载的时候就已经执行,而非静态代码块是类在被创建的时候执行。

上面那些不是我想说的,static最重要的一点就是类属性中被static修饰的变量会被作为GC的root根节点。作为根节点就以为着,这些类变量是基本上不会被回收的,因此static很容易引入内存泄露的危险。

volatile:

volatile的重点就是可见性,向要知道可见性到底是什么就需要弄明白主存和工作内存。java内存模型规定了所有的变量都储存在主内存(Main Memory)中。没条线程还有自己的工作内存(Working Memory),线程的工作内存中保存了该线程使用到的变量的主内存副本拷贝,县城对变量的所有操作(读取,赋值)都必须在工作内存中进行,而不能直接读写主内存中的变量。不用的线程之间也不发直接访问对方工作内存中的变量,线程间变量值的传递均需要通过主内存来完成。

当一个变量定义为vaolatile之后,它将具备两种塔形,第一是保证此变量对所有线程的可见性,可见性是指当一条线程修改了自己的这个变量的值,新值对其他线程来说是可以立即得知的。而普通变量不能,如:线程A修改一个普通变量的值,然后向主内存进行回写,灵位一条线程B在线程A回写完成后在从主内存进行读取操作,新变量才会对线程B可见。但是,volatile并不是线程安全的。虽然使用了volatile后,每次获取的值都是最新的,但是java里面的运算并不是原子性的。

由于volatile变量只能保证可见性,在不符合以下两条规则的运算场景中,我们仍然要通过加锁来保证原子性:

--运算结果并不依赖变量的当前值,或者能够确保只有单一的线程修改变量的值。

--变量不需要与其他的状态变量共同参与不变约束。

使用volatile变量的第二个语义是禁止指令重排序优化,普通的变量仅仅会保证在该方法的执行过程中都能得到正确的结果,而不能保证其中的操作过程是按照自己代码的顺序去运行。因为在一个线程的方法执行过程中无法感知到这点,这也就是java内存模型中描述的所谓的“线程内表现为串行的语义”。

transient:

用transient修饰的属性,在序列化的时候不会添加这个属性。如User类中包括password,在序列化的时候不希望序列化这个属性,既可以用transient修饰。

final:

final修饰的类不能被被继承。

final修饰的属性不能修改。

final修饰的的方法 一:不能被子类重写;二:编译器在遇到final修饰的方法时会使用内嵌机制,大大提高效率。

final修饰的参数,只能读取,不能修改。

static final的理解的更多相关文章

  1. Java 关键字static final使用总结

    Static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,被static修饰的成员变量和成员方法独立于该类的任何对象.也就是说,它不依赖类特定的实例,被 ...

  2. The serializable class does not declare a static final serialVersionUID field of type long

    在编译以下Java程序时,出现The serializable class  does not declare a static final serialVersionUID field of typ ...

  3. 【Java关键字-Interface】为什么Interface中的变量只能是 public static final

    三个关键字在接口中的存在原因:public:接口可以被其他接口继承,也可以被类实现,类与接口.接口与接口可能会形成多层级关系,采用public可以满足变量的访问范围: static:如果变量不是sta ...

  4. Java中static、final、static final的区别(转)

    说明:不一定准确,但是最快理解. final: final可以修饰:属性,方法,类,局部变量(方法中的变量) final修饰的属性的初始化可以在编译期,也可以在运行期,初始化后不能被改变. final ...

  5. Java中static、final、static final的区别【转】

    说明:不一定准确,但是最快理解. final: final可以修饰:属性,方法,类,局部变量(方法中的变量) final修饰的属性的初始化可以在编译期,也可以在运行期,初始化后不能被改变. final ...

  6. Java中static、final、static final的区别(转)+transient

    说明:不一定准确,但是最快理解. final: final可以修饰:属性,方法,类,局部变量(方法中的变量) final修饰的属性的初始化可以在编译期,也可以在运行期,初始化后不能被改变. final ...

  7. java的static final和final的区别

    转自:https://www.cnblogs.com/EasonJim/p/7841990.html 说明:不一定准确,但是最快理解. final: final可以修饰:属性,方法,类,局部变量(方法 ...

  8. static 和 final 和 static final

    众所周知,static 是静态修饰关键字:可以修饰变量,程序块,方法,类. 1.修饰变量. 得知:如果static修饰的是变量,则JVM会将将其分配在内存堆上,该变量就与对象无关,所有对该变量的引用都 ...

  9. java面试官:兄弟简单谈谈Static、final、Static final各种用法吧

    前言 对Static.final.Static final这几个关键词熟悉又陌生?想说却又不知怎么准确说出口?好的,本篇博客文章将简短概要出他们之间的各自的使用,希望各位要是被你的面试官问到了,也能从 ...

随机推荐

  1. dot函数

    dot函数是两个向量的点乘,注意lua中dot函数的写法 th> a [torch.DoubleTensor of size 1x3] [.0002s] th> b [torch.Doub ...

  2. Java 关键字final

    在程序设计中,我们有时可能希望某些数据是不能够改变的,这个时候final就有用武之地了.final是java的关键字,它所表示的是"这部分是无法修改的".不想被改变的原因有两个:效 ...

  3. C# 正则表达式 转自-每日一bo

    最近写爬虫时需要用到正则表达式,有段时间没有使用正则表达式现在渐渐感觉有些淡忘,现在使用还需要去查询一些资料.为了避免以后这样的情况,在此记录下正则表达式的一些基本使用方法附带小的实例.让以后在使用时 ...

  4. TCP、UDP

    双方都是一种网络传输协议 2.TCP需要建立连接,而UDP不需要建立连接(无连接传输) 3.是否建立真实连接的特性,造成了双方可靠性的差距. TCP属于可靠的传输协议:因为传输前双方建立好了连接,相当 ...

  5. mysql 修改数据库的列

    alter table tableName oldcolumn newcolumn datatype;

  6. 友情提醒:欲开发android5.0以上应用,请全部更新开发工具至最新

    周末帮人完成一个项目,android5.0以上版本,谁知道被开发工具折腾的死去活来.我的开发环境是adt-bundle-windows-x86-20140702.zip版本,也是目前能找到的adt-b ...

  7. An Example of Pre-Query and Post-Query Triggers in Oracle Forms With Using Display_Item to Highlight Dynamically

    Example is given for Pre-Query and Post-Query triggers in Oracle Forms, with using Display_Itembuilt ...

  8. shell 标出输入、标准输出、错误输出

    shell中可能经常能看到:>/dev/null  2>&1  eg:sudo kill -9 `ps -elf |grep -v grep|grep $1|awk '{print ...

  9. pupper基线加固

    1.  概述 puppet是一个开源的软件自动化配置和部署工具,它使用简单且功能强大,正得到了越来越多地关注,现在很多大型IT公司均在使用puppet对集群中的软件进行管理和部署,如google利用p ...

  10. install Matlab2016b on Ubuntu 14.04

    From Download Download the install file from Download MATLAB, Simulink, Stateflow, and Other MathWor ...