OOP

  • 对象的创建和拷贝

  • 对象的初始化

  • 多态的实现

  • 内部类、匿名类、静态类

  • 对象内存模型

上面内容均请参考以下文章:

谈谈Java的面向对象

运行时

异常

聊聊Java的异常机制及实现

泛型

聊聊Java的泛型及实现

注解

聊聊Java的注解及实现

反射

必读文章:

Java反射的使用

Java反射在JVM的实现

扩展阅读:

关于反射调用方法的一个log

补充

Java 5中引入了泛型的概念之后,Java反射API也做了相应的修改,以提供对泛型的支持。由于类型擦除机制的存在,泛型类中的类型参数等信息,在运行时刻是不存在的。JVM看到的都是原始类型。对此,Java 5对Java类文件的格式做了修订,添加了Signature属性,用来包含不在JVM类型系统中的类型信息。比如以java.util.List接口为例,在其类文件中的Signature属性的声明是<E:Ljava/lang/Object;>Ljava/lang/Object;Ljava/util/Collection<TE;>;; ,这就说明List接口有一个类型参数E。在运行时刻,JVM会读取Signature属性的内容并提供给反射API来使用。比如在代码中声明了一个域是List<String>类型的,虽然在运行时刻其类型会变成原始类型List,但是仍然可以通过反射来获取到所用的实际的类型参数。

Field field = Pair.class.getDeclaredField("myList");  //myList的类型是List 
Type type = field.getGenericType(); 
if (type instanceof ParameterizedType) {     
    ParameterizedType paramType = (ParameterizedType) type;     
    Type[] actualTypes = paramType.getActualTypeArguments();     
    for (Type aType : actualTypes) {         
        if (aType instanceof Class) {         
            Class clz = (Class) aType;             
            System.out.println(clz.getName());  //输出java.lang.String         
        }     
    } 
}  

动态代理

自动装箱

Lambda表达式、Predicate、Consumer、闭包、变量捕获

系统级

  • Unsafe

  • JNI

  • Java自己实现内存池

常用编程技法

IOC

AOP


suemi
1.5k 声望102 粉丝

程序猿一只,研究僧一枚