java反射
Posted tractors
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java反射相关的知识,希望对你有一定的参考价值。
一、反射概念:不使用new构建对象,且从.class文件入手,对类进行抽象;
//类的概念:对方法和属性的抽象;
二、Class类:java.lang包
Class类是对所有java类的抽象,包括Object;但是Object仍然是Class的父类;
三、常用方法:
1.获取属性
(1)Field getDeclaredField(String name);//根据传入的属性的名字获取一个属性的对象,不包括继承或实现;
(2)Field[] getDeclaredFields();//返回当前类所有的属性构成的数组,不包括继承或实现;
(3)Field getField(String name);//根据传入的属性的名字获取一个公有属性的对象,包括继承或实现;
(4)Field[] getFields();//返回当前类所有的公有属性构成的数组,包括继承或实现;
2.获取构造:
(1)Constructor<T> getConstructor(Class<?>... parameterTypes);
//根据对象类型和参数列表,返回公有构造对象;
//例:.getDeclaredConstructor(int.class,String.class);
(2)Constructor<?>[] getConstructors();//返回所有公有的构造对象,包括继承;
3.获取方法:
(1)Method getDeclaredMethod(String name, Class<?>... parameterTypes);
//根据name方法名,参数类型,返回方法;全部,不包括继承;
//例:.getDeclaredMethod("setId",int.class);
(2)Method[] getDeclaredMethods();//返回方法数组;所有,不包括继承;
(3)Method getMethod(String name, Class<?>... parameterTypes);
//根据name方法名,参数类型,返回方法;公有,包括继承;
(4)Method[] getMethods();//返回方法数组;公有,包括继承;
注释:无参方法获取示例:
cls.getMethod("name",null);
cls.getMethod("name");
4.常用方法:
(1)String getSimpleName();//返回底层类的简称;
(2)T newInstance();//创建此 Class 对象所表示的类的一个新实例。
四、获取Class对象:
(1)Class getClass();//获取当前对象所在的类的抽象;//Class<? extends Studnet> cls=new Student().getClass();
(2).class;//Class<Student> cls=Student.class;
(3)Class.forName("包.类");
(4)ClassLoader.loadClass(className);
//(3)执行静态代码块和重新初始化static参数;(4)不会执行静态;
五、AccessibleObject类:Field、Method 和 Constructor 对象的基类;
(1)void setAccessible(boolean flag);//设置是否允许直接访问私有属性;
//参数:true允许;false不允许,默认;
六、Field类:当前类属性的抽象,属性的反射对象;java.lang.reflect包;
//表示任何一个类中的任何一个属性;
核心方法:
(1)Object get(Object obj);根据传入的对象获取对象当前属性的值;
参数:obj当前属性所属类的对象;
返回值:传入的对象当前属性的值;
(2)void set(Object obj, Object value);根据传入的对象和传入的值给当前属性的反射对象设置值;
参数:obj当前属性所属类的对象;value要传入的属性值;
常用方法:
(1)int getModifiers():以整数形式返回由此Field对象表示的属性修饰符;
//返回值:int限定符标志,值范围2^n;
//Modifier.toString(int mod);返回修饰符;//Modifire静态方法;
(2)String getName():返回此 Field 对象表示的属性名;
(3)Class<?> getType():返回此 Field 对象所表示属性类型;
(4)获取注解:<T extends Annotation> T getAnnotation(Class<T> annotationClass)
//根据指定类型的注释返回注释,如果不存在返回null;
(5)获取注释:Annotation[] getDeclaredAnnotations()
//返回该属性上的所有注释;
七、Constructor类:当前构造方法的抽象;java.lang.reflect包;
核心方法:
(1)T newInstance(Object... initargs):;根据传入的参数构建对象;
常用方法:
(1)int getModifiers();返回修饰符;
(2)String getName();返回方法名;
(3)Class<?>[] getParameterTypes();获取参数;
八、Method类:当前方法抽象;java.lang.reflect包;
核心方法:
(1)Object invoke(Object obj, Object... args);根据传入的对象和参数,调用次对象的当前方法;
//参数:obj需要调用次方法的对象,args需要传入的参数;
常用方法:
(1)int getModifiers();返回修饰符;
(2)String getName();返回方法名;
(3)Class<?>[] getParameterTypes();获取参数;
(4)Class<?> getReturnType();获取返回值类型;
九、Annotation接口:
调取注解的值:注解.注解属性名()
例:Value.value();
以上是关于java反射的主要内容,如果未能解决你的问题,请参考以下文章