Java语法整理

1.泛型中的extends 和 super

    :这个我知道

    : super没用过,意义和extends相反,叫下界通配符,指必须是Fruit或者Fruit的基类

2.阻塞线程


Java语法整理_第1张图片

3.WeakHashMap 和 ReferenceQueue

WeakReference创建时,可以传入一个ReferenceQueue,在对象被回收后,ReferenceQueue对应的变量就变为空,可以根据这个特性来判断对象是否被回收了,WeakHashMap就是利用该机制的,同时还有LeakCanary


4.堆栈

https://www.cnblogs.com/dolphin0520/p/3613043.html

5.ThreadLocal

    首先,在每个线程Thread内部有一个ThreadLocal.ThreadLocalMap类型的成员变量threadLocals,这个threadLocals就是用来存储实际的变量副本的,键值为当前ThreadLocal变量,value为变量副本(即T类型的变量)。

  初始时,在Thread里面,threadLocals为空,当通过ThreadLocal变量调用get()方法或者set()方法,就会对Thread类中的threadLocals进行初始化,并且以当前ThreadLocal变量为键值,以ThreadLocal要保存的副本变量为value,存到threadLocals。

  然后在当前线程里面,如果要使用副本变量,就可以通过get方法在threadLocals里面查找。

    典型场景Looper.myLooper();

    源码解析: Looper中有个static final ThreadLocal sThreadLocal

    Looper.prepar()中,sThreadLocal.set 一个Looper的实例。Looper.myLooper(), ThreadLocal 获取线程中的Looper实例副本


6.Class.forName 和 ClassLoader

java中class.forName()和classLoader都可用来对类进行加载。

class.forName()前者除了将类的.class文件加载到jvm中之外,还会对类进行解释,执行类中的static块。

而classLoader只干一件事情,就是将.class文件加载到jvm中,不会执行static中的内容,只有在newInstance才会去执行static块。

你可能感兴趣的:(Java语法整理)