java反射

Posted tractors

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java反射相关的知识,希望对你有一定的参考价值。

一、反射概念:不使用new构建对象,且从.class文件入手,对类进行抽象;

//类的概念:对方法和属性的抽象

二、Class类:java.lang

Class类是对所有java类的抽象,包括Object;但是Object仍然是Class的父类;

三、常用方法:

1.获取属性

1Field getDeclaredField(String name);//根据传入的属性的名字获取一个属性的对象,不包括继承或实现

2Field[] getDeclaredFields();//返回当前类所有的属性构成的数组,不包括继承或实现

3Field getField(String name);//根据传入的属性的名字获取一个公有属性的对象,包括继承或实现

4Field[] getFields();//返回当前类所有的公有属性构成的数组,包括继承或实现

2.获取构造:

1Constructor<T> getConstructor(Class<?>... parameterTypes);

//根据对象类型和参数列表,返回公有构造对象;

//例:.getDeclaredConstructor(int.class,String.class);

2Constructor<?>[] getConstructors();//返回所有公有的构造对象,包括继承;

3.获取方法:

1Method getDeclaredMethod(String name, Class<?>... parameterTypes);

//根据name方法名,参数类型,返回方法;全部,不包括继承;

//例:.getDeclaredMethod("setId",int.class);

2Method[] getDeclaredMethods();//返回方法数组;所有,不包括继承

3Method getMethod(String name, Class<?>... parameterTypes);

//根据name方法名,参数类型,返回方法;公有,包括继承;

4Method[] getMethods();//返回方法数组;公有,包括继承

  注释:无参方法获取示例:

cls.getMethod("name",null);

cls.getMethod("name");

4.常用方法:

1String getSimpleName();//返回底层类的简称;

2T newInstance();//创建此 Class 对象所表示的类的一个新实例。

四、获取Class对象:

1Class  getClass();//获取当前对象所在的类的抽象;//Class<? extends Studnet> cls=new Student().getClass()

2.class//Class<Student> cls=Student.class

3Class.forName(".")

4ClassLoader.loadClass(className);

//3)执行静态代码块和重新初始化static参数;(4)不会执行静态;

五、AccessibleObject类:FieldMethod  Constructor 对象的基类;

1void setAccessible(boolean flag);//设置是否允许直接访问私有属性;

//参数:true允许;false不允许,默认;

六、Field类:当前类属性的抽象,属性的反射对象;java.lang.reflect包;

//表示任何一个类中的任何一个属性;

核心方法:

1Object get(Object obj);根据传入的对象获取对象当前属性的值;

参数:obj当前属性所属类的对象;

返回值:传入的对象当前属性的值;

2void set(Object obj, Object value);根据传入的对象和传入的值给当前属性的反射对象设置值;

参数:obj当前属性所属类的对象;value要传入的属性值;

常用方法:

1int getModifiers():以整数形式返回由此Field对象表示的属性修饰符

//返回值:int限定符标志,值范围2^n

//Modifier.toString(int mod);返回修饰符;//Modifire静态方法;

2String getName():返回此 Field 对象表示的属性名

3Class<?> getType():返回此 Field 对象所表示属性类型

4)获取注解:<T extends Annotation> T getAnnotation(Class<T> annotationClass)  

//根据指定类型的注释返回注释,如果不存在返回null

5)获取注释:Annotation[] getDeclaredAnnotations()

//返回该属性上的所有注释;

七、Constructor类:当前构造方法的抽象;java.lang.reflect包;

核心方法:

1T newInstance(Object... initargs):;根据传入的参数构建对象;

常用方法:

1int getModifiers();返回修饰符;

2String getName();返回方法名;

3Class<?>[] getParameterTypes();获取参数;

八、Method类:当前方法抽象;java.lang.reflect包;

核心方法:

1Object invoke(Object obj, Object... args);根据传入的对象和参数,调用次对象的当前方法;

//参数:obj需要调用次方法的对象,args需要传入的参数;

常用方法:

1int getModifiers();返回修饰符;

2String getName();返回方法名;

3Class<?>[] getParameterTypes();获取参数;

4Class<?> getReturnType();获取返回值类型;

九、Annotation接口:

调取注解的值:注解.注解属性名()

例:Value.value()

以上是关于java反射的主要内容,如果未能解决你的问题,请参考以下文章

JAVA反射Field

反射机制在java中如何做呀?

如何利用java的反射机制动态创建对象

说说对java反射的理解,使用反射如何获取一个类的所有方法,使用反射需要注意哪些问题?

请问java中的反射机制与用法

Java反射机制