店铺:https://shop58616120.taobao.com
一、Java 动态性
动态语言:程序运行时,可以改变程序结构或变量类型。例如Python,Ruby,JavaScript等
注释1:C、C++、Java不是动态语言
二、反射机制 reflection
可以在运行时加载、探知、使用编译期间完全未知的类。
例如 Class cls = Class.forName("classPath");
Class cls = String.class;
Class cls = Obj.getClass();
程序在运行状态中,可以动态加载一个只有名称的类,对于任意一个已加载的类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性。加载完类之后,在堆内存中就产生了一个Class类型的对象(一个类只有一个Class对象),这个对象就包含了完整的类的结构信息。我们可以通过这个对象看到类的结构。
反射的作用
动态加载类、动态获取类的信息(属性、方法、构造器)
动态构造对象
动态调用类和对象的任意方法、构造器
动态调用和处理属性
获取泛型信息
处理注释
注释1:ORM(Object Relationship Mapping)
类与表结构对应
属性和字段对应
对象和记录对应
注释2:使用注解完成类与表结构的映射关系,定义注解处理流程处理。
注释3:反射机制性能问题 setAccessible 或 cglib/javaassist字节码操作
注释4:反射操作泛型,ParameterizedType、TypeVariable等