static 关键字:修饰变量、方法、静态块
- 修饰变量: 在静态存数区只在首次调用该类时初始化一次,后面再new该类的对象时不再进行多次的初始化,多对象之间共同使用
- 修饰方法: 类的方法本身就在静态存储区,供类的多个对象使用同一个方法,修饰方法后,可以使用 类名.方法名 直接使用该方法
- 修饰代码块(静态块): 代码块里的内容只在首次调用该类时初始化一次,后面再new该类的对象时不再进行多次的初始化
- 静态导包:使用类名.方法名直接调用方法
final关键字:修饰变量、方法、类
- 修饰变量:基本数据类型变量、引用类型变量、方法中的参数
(修饰引用类型的变量时,对象中的属性值可以改变,但对象的引用地址即变量不可变,不可指向其它对象) - 修饰方法:锁定方法不能被继承类重写修改
- 修饰类:不能被继承
其它的不可变对象:
Collections.unmodifiableXXX : Collections 、List、 Set、M ap
Map<Integer, Integer> map = new HashMap<>();
map.put(1, 2);
map.put(3, 4);
map.put(5, 6);
map = Collections.unmodifiableMap(map);
线程不安全类:
ArrayList、HashSet、HashMap (线程不安全,对应的安全类有很多)
StringBuffer(安全,加了synchronized关键字同步,比较慢)
StringBuilder(不安全,方法局部变量经常使用它)
线程不安全写法:
先检查在执行
if(condition(a)){ // 注意a是否为线程安全类
handle(a);
}