Java反射(一)
2021-02-20 15:21
标签:nbsp factory odex 对象 不包含 就是 vat 包含 color 将之前学的Java反射进行一个汇总记录。 Java反射机制就是通过Class对象创建对应实例,并调用相关方法。首先是需要有Class对象,有三种获取Class对象的方式: (1)Object.getClass(),如Person p = new Person;对应的Class对象为p.getClass(). (2)类.class,如Person.class (3)Class.forName(),如Class.forName("com.xxx.Person"); 拿到类的Class对象,可通过反射进行实例化。有两种方式: (1)clazz.newInstance() 在1.9版本被标注@Deprecated(since="9") (2)clazz.getDeclaredConstructor().newInstance() 该方法可以抛出InvocationTargetException 和 NoSuchMethodException两个异常 利用Class.forName()方法和clazz.getDeclaredConstructor().newInstance()可以实现类实例化的工厂设计模式,如下: (1)获取包信息:public Package getPackage() 其中Package implements AnnotatedElement,AnnotatedElement标注可以返回对应注解 (2)获取继承的父类:public Class super T> getSuperclass() (3)获取实现的接口:public Class>[] getInterfaces() (4)获取构造方法: 获取全部构造方法:public Constructor>[] getDeclaredConstructors() 获取指定构造方法:public Constructor (5)获取方法: 获取全部方法(包含父类):public Method[] getMethods() 获取指定方法(保安父类):public Method getMethod?(String name,Class>... parameterTypes),其中name为方法名,后边为方法参数类型 获取本类全部方法:public Method[] getDeclaredMethods() 获取本类指定方法:public Method getDeclaredMethod?(String name,Class>... parameterTypes),其中name为方法名,后边为方法参数类型 Method中重要的方法为:public Object invoke?(Object obj, Object... args),其中第一个参数为对象实例,第二个参数为method的参数。反射方法调用主要通过该方法进行。 (6)获取属性 获取全部属性(包含父类和接口的所有public属性):public Field[] getFields() 获取指定属性(包含父类和接口的所有public属性):public Field getField?(String name) 获取本类全部属性(不包含继承的属性):public Field[] getDeclaredFields() 获取本类指定属性:public Field getDeclaredField?(String name) Field中重要的方法:public Class> getType(),返回属性类型。 (7)底层有个Unsafe工具类,可以通过该类绕过JVM实例化对象,但程序中不建议使用。 Java反射(一) 标签:nbsp factory odex 对象 不包含 就是 vat 包含 color 原文地址:https://www.cnblogs.com/shuimuzhushui/p/12681036.html1. Class对象实例化
2.反射实例化对象
3.反射与工厂设计模式
class Factory{
private Factory(){}
public static
4.反射与类操作