转载请注明原文地址:http://www.javashuo.com/article/p-swlupmvf-eu.htmlhtml
用途:Java中一个类在定义时若是实现了Serilizable接口,那么这个类的对象就能够被序列化。(序列化:把对象内容转化为byte数组。反序列化:从byte数组提取信息重构出对象),可是咱们考虑到类中的某些重要属性(如:密码)不想被序列化,那么咱们能够用transient关键字修饰它。java
用法:在声明成员变量时做为修饰符。数组
举例:缓存
private transient InputStream is;
用途:指出对象是不是特定类的一个实例,返回一个布尔值做为结果,以判断这个对象是不是这个特定类或者是它的子类的一个实例。this
用法:result = object instanceof classspa
举例:线程
if p instanceof Person: .... else: ....
用途:能够用于声明成员变量、方法、类以及静态变量。final声明的内容不容许被更改。code
1)final类:用final去修饰一个类的时候,表示这个类不能被继承,所以就不存在被子类修改的可能了。htm
2)final方法:父类中定义的被final修饰的方法,不能在子类中被重写。对象
3)final变量:必需要在声明的同时赋予初始值;而且以后不容许更改变量的值(若是修饰的成员变量是基本类型,则表示这个变量的值不能改变;若是修饰的成员变量是一个引用类型,则是说这个引用类型变量所保存的地址不能变,可是这个引用所指向的对象里面的内容仍是能够改变的。)
用途:static的主要做用在于建立独立于具体对象的域变量或者方法。
用法:做为关键字用于变量声明、方法定义、代码块前修饰。
特色:
1)static能够修饰变量、方法、代码块
2)被static修饰的内容是独立于该类的任何对象的,不属于任何一个实例对象,而是被类的实例对象所共享
3)在类被加载的时候,就会自动去加载被static修饰的部分
4)当一个类加载完毕以后,即使没有建立对象,也能够去访问静态内容
注意事项:
1)静态方法中没有this关键字,由于静态是随着类的加载而加载,而this是随着对象的建立而存在的。
2)静态比对象优先存在,所以静态能够访问静态的内容,可是静态不能访问非静态的内容。
3)非静态的能够去访问静态的内容,由于静态的内容已存在。
用途:volatile只能修饰变量。该变量对于全部线程可见,全部做用在该变量上的操做引发变量的值的变化都会第一时间通知到全部使用它的线程。
原理:每一个线程在使用volatile变量时,若是对变量的值做出了改变,则CPU强制线程马上把新的值写入主存中。而其余线程在使用到这个变量时,不是从缓存中读取过时值而是直接从主存中读取最新值。
用法:修饰成员变量。
用途:能够把任何一个非null 对象 做为"锁",当synchronized做用在方法上时,锁住的即是对象实例(this);看成用在静态方法时锁住的即是对象对应的Class实例,由于 Class数据存在于永久带,所以静态方法锁至关于该类的一个全局锁;当synchronized做用于某一代码域时,锁住的即是对应的代码块。
原理:syncrhoized实现时使用了自旋锁,当一个线程进入竞争队列前,先自旋(等一等看锁会不会释放,一旦释放马上得到锁对象),自旋期间线程能够作一些无心义的操做来实现暂时占用CPU而不是阻塞。线程自旋超过必定时间还没得到锁,就进入竞争队列被筛选。
用法:修饰 方法、代码块。
与volatile比较:
1)volatile比synchronized的使用和执行成本会更低,由于它不会引发线程上下文的切换和调度,也不会引起线程阻塞。
2)volatile仅能实现变量的修改可见性,但不具有原子特性,而synchronized(和lock)则能够保证变量的修改可见性和原子性。(原子性:操做不可被分割执行)
const是java中的预留关键字(java中预留关键字还有goto),如今没有做为关键字。常见于C,C++中,相似于Java的final。
Java中定义常量是经过static final组合来实现的,不是const。