疯狂Java讲义 读书笔记(一)
|
38.缓存池:先进先出缓存实例,重写了equals和hsahcode class CacheImmutale
{
private static int MAX_SIZE = 10;
// 使用数组来缓存已有的实例
private static CacheImmutale[] cache
= new CacheImmutale[MAX_SIZE];
// 记录缓存实例在缓存中的位置,cache[pos-1]是最新缓存的实例
private static int pos = 0;
private final String name;
private CacheImmutale(String name)
{
this.name = name;
}
public String getName()
{
return name;
}
public static CacheImmutale valueOf(String name)
{
// 遍历已缓存的对象,
for (int i = 0 ; i < MAX_SIZE; i++)
{
// 如果已有相同实例,直接返回该缓存的实例
if (cache[i] != null
&& cache[i].getName().equals(name))
{
return cache[i];
}
}
// 如果缓存池已满
if (pos == MAX_SIZE)
{
// 把缓存的第一个对象覆盖,即把刚刚生成的对象放在缓存池的最开始位置。
cache[0] = new CacheImmutale(name);
// 把pos设为1
pos = 1;
}
else
{
// 把新创建的对象缓存起来,pos加1
cache[pos++] = new CacheImmutale(name);
}
return cache[pos - 1];
}
public boolean equals(Object obj)
{
if(this == obj)
{
return true;
}
if (obj != null && obj.getClass() == CacheImmutale.class)
{
CacheImmutale ci = (CacheImmutale)obj;
return name.equals(ci.getName());
}
return false;
}
public int hashCode()
{
return name.hashCode();
}
}
public class CacheImmutaleTest
{
public static void main(String[] args)
{
CacheImmutale c1 = CacheImmutale.valueOf("hello");
CacheImmutale c2 = CacheImmutale.valueOf("hello");
// 下面代码将输出true
System.out.println(c1 == c2);
}
}
39.默认方法:1.JDK1.8后新增的方法,在接口中一共有三种方法,抽象方法(abstract),类方法(static),默认方法(default),后两者必须有方法实现 2.使用接口的实例来调用默认方法 40.抽象类:抽象类作为多个子类的抽象父类,可以被当成系统实现过程的中间产品,这个中间产品已经实现了系统的部分功能,但这个产品依然不能当成最终产品,必须由进一步的完善, 41.内部类:1.提供更好的封装 2.内部类成员可以直接访问外部类的私有数据 3.匿名内部类适用于创建只需要一次使用的类 4.局部内部类和匿名内部类不是类成员 5.包含内部类的类被称为外部类 42.非静态内部类:1.非静态内部类对象里保存了一个外部类的引用 2.外部类对象访问非静态内部类成员时,可能非静态普通内部类对象根本不存在 3.不允许在非静态内部类定义静态成员 43.静态内部类:1.静态内部类可以包含静态成员和非静态成员 2.静态内部类是外部类的类相关,静态内部类对象寄生在外部类的类本身中,只持有外部类的类引用,没有外部类的对象引用 (编辑:网站开发网_安阳站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |

