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. C#实现中国天气网XML接口测试

    点击链接查看中国天气网接口说明,最近想研究一下接口测试,源于最近一次和某公司的技术总监(交大校友)谈话,发现接口测试的需求是比较大的,于是想要研究一下. 好不容易在网上找到了一个关于中国天气网的接口说 ...

  2. 用户 NT AUTHORITY\NETWORK SERVICE 登录失败

    Windows server 2003,2008 Web.Config 配置连接sql 使用 win身份验证时: 当连接sql server使用信任连接(参看Web.Config文件)时就会出这个错误 ...

  3. if else 语句练习

    一.if  else 语句.

  4. Objective-C之category

    http://blog.csdn.net/siemenliu/article/details/7835808

  5. android Log 等级以及在Android Studio 的Logcat中过滤方法

    Log等级 等级越高,问题越严重. Log.e(TAG,"级别5,错误信息"); Log.e(TAG,"级别5,错误信息"); Log.w(TAG," ...

  6. C#操作oracle 到ExecuteNonQuery卡死不执行

    方法1: 可能大家都解决了,我也遇到这个问题,c#更新卡住,但是plsql更新没问题.一直没找到答案,无意中想起,可能是oracle的表锁定了. 用下面的方法,顺利解锁保存了. SELECT /*+  ...

  7. CodeForces 445B DZY Loves Chemistry

    DZY Loves Chemistry Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64 ...

  8. Python串口编程

    python的串口网上有很多例子,这里了只是把认为好的整理到一起. 首先,应该安装serial模块,还能开始后续的操作.我用的python2.6,serial模块可以在这里下载安装serial模块下载 ...

  9. FRM-10001, FRM-10002, FRM-10003 Oracle Form Builder Error Solution

    These errors occurred usually due to forms connection problem or some internal problem, the solution ...

  10. Set Font Properties On Mouse Hover Of Push Button And Text Items At Run time In Oracle Forms

    Change the font size and weight of text items and push buttons on mouse hover in Oracle Forms.   An ...