static :静态的~
static :静态变量、静态方法;
被修饰的成员变量或者方法独立于该类的任何对象,只要该类被加载,被修饰的成员变量或者方法就存在并可以使用。
用public修饰的static成员变量和成员方法本质是全局变量和全局方法;
static变量前可以有private修饰,表示这个变量可以在类的静态代码块中,或者类的其他静态成员方法或中非静态成员方法使用,但是不能在其他类中通过类名来直接引用;
public或private是访问权限限定,static表示不要实例化就可以使用;
静态变量或者静态方法仅仅会初始化一次,静态变量会被所有所有的对象共享使用;
同时,不推荐实例化的对象,去访问或者操作静态字段。
类名.静态方法名(参数列表...)
类名.静态变量名
static :静态代码块、static代码块;
在类中,不在方法体内,任意位置,一处或者多处,JVM加载类时会执行这些静态的代码块,按顺序执行,且只执行一次。
static :static class、静态内部类;
非静态内部类是不可以声明静态成员的(属性和方法);
非静态内部类,可以随意的访问外部类中的成员变量与成员方法,即便是私有的也可以,但静态内部类对外部类的访问是有局限的,如不能访问外部类的非静态成员与变量;
final:最终的~
final:final类、final方法
final类,不能被继承,不会有子类,意味着其成员方法没有机会被覆盖,默认都是final的。
final方法,若某一方法,想被子类使用,但是不想被子类覆盖,可以写成final方法
final:final变量(常量)
用final修饰的成员变量表示常量,值一旦给定就无法改变!
static final用来修饰成员变量和成员方法,可简单理解为“全局常量”“全局方法”
对于变量,表示一旦给值就不可修改,并且通过类名可以访问。
对于方法,表示不可覆盖,并且可以通过类名直接访问。
但是,如果用在了集合等容器上,不可以改变容器变量本身,但可以修改容器中存放的对象!
transient:短暂的~
transient的变量不会被自动序列化(Serializable)进行持久化;但可以被非自动序列化(Externalizable)的进行持久化;
Externalizable:Serializable接口的子类,重写writeExternal()和readExternal(),必写无参数构造函数,
序列化: 将数据结构或对象转换成二进制串的过程
反序列化:将在序列化过程中所生成的二进制串转换成数据结构或者对象的过程
volatile:易变的~
volatile修饰的成员变量在每次被线程访问时,都强迫从共享内存中重读该成员变量的值;当成员变量发生变化时,强迫线程将变化值回写到共享内存;强制维持变量的同一个值
原理:volatile关键字就是提示VM,对于这个成员变量不能保存它的私有拷贝,而应直接与共享成员变量交互;线程有自己的内存,自己的私有拷贝;
instanceof 与 isInstance
obj.instanceof(class)判断该对象是否是该类或其父类的对象;class.inInstance(obj)这个对象能不能被转化为这个类;
在本质使用上没有区别,只是,一个是操作符,一个是类的方法。