(一)static
1、static修饰的方法和属性会统一交给类管理,即多个类对象只会对应一个属性或方法,并由JVM分配在堆中的一块不变的区域。
2、static修饰的方法,可以使用"类名.方法名"的方式调用,避免了需要new对象的繁琐和内存资源的消耗。
总结
1、用来修饰类成员变量,从而实现所有对象对成员变量的共享。
2、用来修饰成员方法,可以直接“类名.方法名”的方式调用,常用于工具类。
3、静态块用法,将多个类成员统一初始化,即在实际被调用之前就被初始化了,且只需要初始化一次。
4、静态导包用法,将类的方法直接导入到当前类中,从而直接使用“方法名”进行调用,更加方便。
(二)final
1、修饰成员变量,说明该变量的值是不可变得。标注该变量只能进行一次赋值操作,且在运行过程中不可改变它的值。
2、修饰方法入参,说明整个方法中,参数的值是不可变的。
注意:当入参为对象时,是可以改变引用对象中成员变量的值。
3、修饰方法,说明该方法不能被覆盖,即不能被继承该类的子类重写。
4、修饰类,说明该类是无法被继承的。
(三)ThreadLocal
1、ThreadLocal为每个使用该变量的线程提供独立的变量副本,因此每一个线程都可以独立地改变自己的副本,而不会影响其他线程所对应的副本。
2、解决多线程并发访问同一变量造成脏数据的问题。
- 提供的方法:
- pub void set(Object value) 设置当前线程的线程局部变量的值
- public Object get() 该方法返回当前线程所对应的线程局部变量的值
- public void remove() 将当前线程局部变量的值删除,目的是为了内存的占用