本帖最后由 陈振兴 于 2012-9-9 04:58 编辑
对于匿名内部类我给你举个最简单的例子,然后你结合楼上比较抽象的语言就理解了!
Useing a=new Useing(){//这种书写方式就是匿名的内部类
public void kk()
{
System.out.println("这是一个接口类型的匿名内部类")
}
};
void print(){
a.kk();
}
举例:匿名内部类,顾名思义,为什么用内部类?1)某类中访问另外一个类中的私有类。2)某一个类中的对象依赖于另一个类的对象。
如人和心脏是一体的吧!心脏是依附人体而存在,你去看病的时候,你说心脏有点不好,不可能医生就把你心脏拿出来吧!……
抽象到程序当中:
interface Hear{//为什么把心脏抽象成接口,因为每个人都有,心脏的健康状态不一样,抽象出来
//跳动
void jump();
}
class Person{
String name;//什么名字 , get,set方法就不写了
Person(String name){this.name=name}//谁看病
public void seeDoctor(){//看医生去了
new Hear(){
public void jump(){
System.out.println(Person.this.name+"哦,你的心脏不太好了,先做个心电图……");
}
}.jump();
}
}
匿名内就是如此!
抛砖引玉,回头再看这些专业术语就ok!
一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类,没有类名,根据多态,我们使用其父类名。
因其为局部内部类,那么局部内部类的所有限制都对其生效。
匿名内部类是唯一一种无构造方法类。
匿名内部类在编译的时候由系统自动起名Out$1.class。
还有第二个问题:
栈有两个方法,push和pop,小时候玩过枪吧!就是那个弹夹存放子弹的功能(自己抽象个类试着玩玩)。
然后重点:Java的堆是一个运行时数据区,类的对象从中分配空间。这些对象通过new、newarray、anewarray和multianewarray等指令建立,它们不需要程序代码来显式的释放。堆是由垃圾回收来负责的,堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配内存的,Java的垃圾收集器会自动收走这些不再使用的数 据。但缺点是,由于要在运行时动态分配内存,存取速度较慢。 栈的优势是,存取速度比堆要快,仅次于寄存器,栈数据可以共享。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。栈中主要存放一些基本类型的 变量(,int, short, long, byte, float, double, boolean, char)和对象句柄。
java.util.stack(stack即为堆栈)的父类为Vector。可是stack的父类是最不应该为Vector的。因为Vector的底层是数组,且Vector有get方法(意味着它可能访问到并不属于最后一个位置元素的其他元素,很不安全)。 Stack类以后不要轻易使用。
知识学活了就完全没问题了啊!呵呵
有时间可以参照一下我的日志,但是没有那么多的例子啊!呵呵!从这两天刚泡论坛啦!
|