JAVA的反射机制

反射

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

获取类的三种方法(以Student类为例):

1.Class c1=Class.forName("包名.Student");

2.Class c2=Student.class;

3.Student student=new Student();

   Class c3=student.getClass();

常用:this.getClass();

创建对象:

//获取类

Student student=new Stusdent();

Class c1=student.getClass();

//获取类以后,创建对象

Object obj=c.newInstance();//调用了Student类的无参构造方法

获取属性:分为所有属性和指定属性。

getFields                getDeclaredFields

返回的是申明为public的属性,包括父类中定义,     返回的是指定类定义的所有属性,不包括父类的。

1.获取所有属性

//获取类

Class c2=Student.getClass();

Field [ ] fields=c2.getDeclaredFields();

//创建StringBuffer用来存储属性

StringBuffer sb=new StringBuffer();

for(Field field :fields){

sb.append(Modifier.toString(c2.getModifiers())+"class"+c2.getSimpleName());//输出是修饰符名+class+类名:eg. public class Student

sb.append(Modifier.toString(field.getModifiers()+""));//添加修饰符名

sb.append(field.getType().getSimpleName());//添加属性类型名

sb.append(field.getSimpleName());//添加属性名

}

2.获取指定属性:

//获取类

Class c2=Class.forName("包名.Student");

//获取指定属性

Field field=c2.getDeclareField("no");

//先实例化对象,然后为属性赋值

Object obj=c2.newInstance();

//打破封装

 field.setAccessible(true); //使用反射机制可以打破封装性,导致了java对象的属性不安全。  

field.set(obj,"2015110999");//obj为实例化之后的对象,2015110999为定义的属性值

//获取o对象的field属性的值

field.get(o);

获取方法:分为普通方法和构造方法。

方法名             含义

getDeclaredMethods()        获取所有方法

getReturnType()            获取方法的返回值类型

getParameterTypes()         获取方法的传入参数类型

getDeclaredMethod("方法名",参数类型.class)    获取特定的方法

构造方法

getDeclaredConstructors()            获取所有的构造方法

getDeclaredConstructor(参数类型.class)      获取特定的构造方法

父类和父接口

getSuperClass()                 获取某类的父类

getInterfaces()                  获取某类的父接口

原文地址:https://www.cnblogs.com/cn-chy-com/p/7487240.html