一、类型信息RTTI

  1、class.getInterfaces 可以获取到当前类实现的接口数组(注:不包括父类实现的接口)。

  2、为使用类而做的准备三步骤

    1)类加载器进行加载;2)链接:验证类的字节码,为静态域分配存储空间;3)初始化:初始化父类,执行静态初始化器与静态初始化块。

    当使用字面常量引用class时,会发生前两个步骤(Class initiable = Initable.class);而引用类静态基本类型的常量时也不发生初始化 (static final int staticFinal= 47),其他情况会导致初始化步骤(static final Integer staticFinal= 47;static final int staticFinal2 = hello.rand.nextInt(1000); static int staticNonFinal= 47;)

  3、对Class使用泛型,如 Class<?>, Class<? extends Number> 前者接受任意类型,后者接受Number子类。Class<Number>不能接受Number子类如int

  4、类型的动态判断  "zcs" instanceOf String, String.class.isInstance("zcs");  这两种判断方式都考虑了继承体系,也就是子类对象也属于父类的实例。

  5、实现一个抽象工厂   

interface Factory<T>{ T create();}

class Part{
    static List<Factory<? extends Part>> partFactories = new ArrayList<Factory<? extends Part>>();
    static{
        partFactories.add(new FuelFilter.Factory());
    }
}

class Filter extends Part{}
class FuelFilter extends Filter{
    public static class Factory implements test.Factory<FuelFilter>{
        public FuelFilter create(){
            return new FuelFilter();
        }
    }
}
View Code

相关文章: