---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
08/04/30 开学的第六天记录:
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1.内部类:
a.内部类的使用要先产生外部类的对象out,然后使用out.new Inner(); 声明的时候要使用 Out.Inner in = out.new Inner();
b.通常对内部类的方法是在其中放一个get方法 来返回内部类对象
c.内部类的修饰符跟类成员的修饰符是一样的
2.匿名内部类:
在使用的时候直接实现主要针对抽象类和接口的实现,没有类的名称所以叫内部类
如:new FileFilter(){
public boolean accept(File file){
if(file.getPath().endWith(".txt")) return true;
return false;
}
}
3.引用与对象
关于比较 "==" 与 equals 区别
a.在比较基本数据类型的时候可以使用 “==”直接比较,但是在比较类类型的数据的时候不能直接使用
“==”比较因为直接比较的是引用的地址而不是对象
b.要比较实际的对象自己要覆盖父类 Object 类的 equals方法,因为在Object中equals方法也是通过==来实现的不能比较对象是不是相同
最好也要覆盖hashcode()方法
4.克隆:
深克隆:将所有属性也实现克隆
浅克隆:只克隆当前对象,对象的属性继续使用原引用
能克隆的对象,类必须要实现Cloneable接口,并且要覆盖object类中的clone方法,将protected修改为public 的
5.垃圾回收:
强引用:只要有强引用指向对象,对象所占用的内存就不会被释放
软引用:比强引用弱,即使有软引用指向对象,垃圾回收在内存空间不够用的情况下也会回收对象
JVM(Java Virturl machine)的规范要求软引用的清除必须是在OutOfMemoryError错误抛出
之前完成,可以将软引用与引用队列关联起来,在对象清除后,将软引用加入队列中以便判断
一般用于实现内存敏感的缓存
弱引用:弱引用的引用强度比软引用还要弱,垃圾回收扫描到对象只有弱引用时,可能回收对象
垃圾回收是一个低优先级的线程,因此多数情况下弱引用不会受到影响,即程序可以向正常引用
那样使用弱引用
一般用于实现映射关系,如WeakHashMap
虚引用:不能决定对象的生命周期,仅有虚引用指向的对象与没有引用指向的对象相似,对象可以在任意
时刻被回收
虚引用必须与应用队列联合使用,用于跟踪对被引用对象的垃圾回收工作
虚引用对象永远不可达,其get方法总是返回null
提供了一种不依赖于Java终结机制的清理方法
引用队列:当引用指向的对象被清除后,引用将被加入到队列中
注意加入队列的时间并不是立即完成的,可能要在清除后的晚些时候加入
因此在测试的时候应该让主线程休眠一会
软引用和弱引用是回避Java内存泄漏的一种选择
6.java中的内存泄漏:
全局集合中加入的对象使用后没有清除
高速缓存中不再使用对象依然存储在缓存中
类加载器:只要有对类对象或其静态成员的引用,其类加载器就必须驻留在内存中
7.java中的类加载器:
引导类加载器(Bootstrap Class Loader)
扩展类加载器(Extension Class Loader)
应用类加载器(Application Class Loader)