Java 中引用的四种类型
1. 强引用
2. 软引用
3. 弱引用
4. 虚引用
我们在家里面,有好多物品都是有用的,比如我们的碗筷,几乎是每天都要用到得,或者是水,厕所等等。但是,有时候,我们家里面有的是可以有可以没有的,比如我们吃完饮料以后的可乐瓶,有时候瓶子可以装一些东西,有用,我们就留着,但是有时候没有放的地方,我们就扔掉掉了。
在java中,引用也是类似的。
我们一般用的就是强引用。如果一个对象具有强引用,那就类似于我们在生命中不可缺少的
生活用品,垃圾回收绝对不会去回收它的。当内存空间不足的时候,虚拟机宁愿抛出异常,也不会去回收它的内存的。
软引用
如果一个对象只是具有软引用的,那就类似于我们在生活中可有可无的生活用品,如果内存空间足够的话,垃圾回收就不会去回收它的,如果是内存空间不足的话,那么就回收它了。只要没有被垃圾回收掉的对象就是可以程序使用的,软引用可用来实现内存敏感的高速缓存。软引用可以和一个引用队列联合在一起使用的,如果软引用所引用的对象呗垃圾回收器回收了,那么java虚拟机就会把这个软引用家人到与之关联的引用队列中去的
弱引用
如果一个对象只是具有弱引用的,那就是类似于可有可无的生活用品了。弱引用于软引用的区别在于,如果是弱引用,那么垃圾回收线程扫到话,那么就立刻回收掉弱引用的,只有弱引用的生命周期更加的短的。在垃圾回收线程扫描的时候,锁管辖的内存区域的过程中,一旦发现了之具有弱引用的对象,不管当前的内存空间足够还是不足够,那么就会马上收回这个对象的。
虚引用
虚引用就是虚设的引用了,实际是不存在的,虚引用并不会决定对象的生命周期的。如果一个对象仅仅是持有虚引用的,那么就和没有任何引用一样,在任何时候都可能被垃圾回收期回收的。虚引用主要用来跟踪对象呗垃圾回收器回收的活动的。虚引用于软引用和弱引用的一个区别在于,虚引用必须和引用队列联合使用的,当垃圾回收器准备回收一个对象的时候,如果发现它还是虚引用,就会在回收对象的内存之前把这个虚引用加入到与之关联的引用队列中,程序可以通过判断引用队列中是否已经加入了虚引用来判断是否将要被垃圾回收线程回收掉。
内部类
在一个类中的内部定义的类就叫做内部类。内部类允许把一些逻辑相关的组织在一起,并且控制内部类代码的可视性,对于初学者来说,学习内部类好像是多余的,但是我们学会了内部内的使用就掌握了java高级编程的一部分,就会让我们的代码看上去更加的优雅。