JAVA的反射机制

Posted KeepUp~

tags:

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

反射

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

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

2.Class c2=Student.class;

3.Student student=new Student();

   Class c3=student.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()                  获取某类的父接口

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

java 中反射机制和内省机制的区别是啥?

java反射机制

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

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

Java反射机制详解

Java反射机制详解