1.enum 是一个类
2.泛型的实现使用了类型擦除技术
3.非静态内部类持有外部类的引用
4.需要将自由变量声明成final才能给匿名内部类访问
java虚拟机里面的方法调用是以方法栈的形式去执行的.压人栈内的元素就叫做栈帧.
栈帧(Stack Frame)是用于支持虚拟机进行方法调用和方法执行的数据结构,它是虚拟机运行时数据区的虚拟机栈(Virtual Machine Stack)的栈元素。栈帧存储了方法的局部变量表,操作数栈,动态连接和方法返回地址等信息。第一个方法从调用开始到执行完成,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。
局部变量表和操作数栈是栈帧内进行执行字节码的重要部分.局部变量表顾名思义,就是用来保存方法参数和方法内部定义的局部变量的一段内存区域.而操作数栈也是一个后入先出的栈,程序运行过程中各种字节码指令往其中压入和弹出栈进行运算的.
java方法的调用,其实是一个个栈帧入栈出栈的过程,而栈帧内部又包含了局部变量表,操作数栈等部分.泛型的实现原理实际上是将类型都变成了Obejct,所以才能接收所有继承Object的类型,但是像int,char这种不是继承Object的类型是不能传入的.
非静态内部类是持有外部类的引用的,所以在安卓中使用Handler的话一般会声明成静态内部类,然后加上弱引用去防止内存泄露.
类型不安全的设计。使用泛型的意义在于它是类型安全的.
限定只能传入某些型的子类或者父类的容器:
上限:<? extends T> 只能匹配T和T的子类
下限:<? super T> 只能匹配T和T的父类
泛型类型擦除,原因在于java的泛型实现中有个叫做类型擦除的机制。简单来讲就是运行的时候是无法获取到泛型使用的实际类型的。
类型擦除实际上是将泛型类型转换了Obejct。由于所有的java类都是Object的子类,所以实现起来就很简单了。只需要在编译的时候将所有的泛型占位符都换成Object就可以了