java中反射
一、反射的含义及作用
1.JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;
2.对于任意一个对象,都能够调用它的任意方法和属性;
3.这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制
二、如何得到反射(以包名为test中的Student类为示例)
package test;
public class Student {
public Student(){
}
public Student(int num,String name){
}
private int num;
public String name;
protected String address;
}
1.获得类的对象,用对象.getclass();
Student st=new Student();
st.getclass();
2.类名.class;
Student.class;
3.Class.forName("包名、类名");
Class.forName("test、Student");
三、具体反射类中的构造器,属性、方法
获取类中的构造器即public Student(){}
//测试类中的代码
Class c=Student.class;
//getConstructors只能获得公共构造器//getDeclaredConstructors获得所有构造器
//constructor是获取构造器时所用
Constructor[] cs= c.getConstructors;
for (Constructor constructor : cs) {
Student st=(Student)constructor.newInstance();
System.out.println(st);
}
获取类中的属性(num,name,address)
public class Test{
public static void main(String[] args) throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
//获得反射,获取属性的关键代码
Class c=Student.class;
Field[] fs= c.getDeclaredFields();
for (Field field : fs) {
System.out.println(field);
}
//输出的结果为
/* private int com.qm.test.Student.num
* public java.lang.String com.qm.test.Student.name
* protected java.lang.String com.qm.test.Student.address
*/
}
}
获取类中的方法
public class Test{
public static void main(String[] args) throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
//获取方法的关键代码
Class c=Student.class;
Method[] ms=c.getMethods();
for (Method method : ms) {
System.out.println(method);
}
//此段代码将会输出Student类中继承了Object类的一些方法
}
}