一.反射的概念
JAVA反射机制实在运行状态中,对于任意一个类,都能够知道这个类的所有数字那个和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
二.反射机制的作用
1,反编译:.class-->.java
2,通过反射机制访问java对象的属性,方法,构造方法等;
三.具体功能实现
首先给出我的实体类(Person)
public class Person implements Noarguments,Have { //实现两个接口
public String pid;
public String pname;
public String psex;
//无参无返回
public void m1() {
System.out.println("m1");
}
//无参有返回
public String m2() {
return "m2";
}
//有参有返回
public String m4(String name,String sex) {
return name+sex;
}
//有参无返回
public void m3(Integer pid,String name,String sex) {
System.out.println(pid);
System.out.println(name);
System.out.println(sex);
}
}
接下是两个接口类Noarguments(无参方法),Have(有参方法)
public interface Noarguments {
public void m1();
public String m2();
}
public interface Have {
public void m3(Integer pid,String name,String sex);
public String m4(String name,String sex);
}
接下来在Temp类里实现
public class Temp {
public static void main(String[] args) throws Exception {
// 得到Person类的对象
Class c = Class.forName("com.reflect.Person");
//实例化一个Person的对象
Object obj = c.newInstance();
// 得到Person类里所有方法的名字
Field[] f = c.getDeclaredFields();
for (Field field : f) {
System.out.println(field.getName());
}
// 得到所有属性的名字
Method[] m = c.getDeclaredMethods();
for (Method me : m) {
System.out.println(me.getName());
}
// 得到所有接口名称
Class[] cc = c.getInterfaces();
for (Class cl : cc) {
System.out.println(cl.getName());
}
// <5>并调用方法(无参无返回,无参有返回,有参数无返回,有参数有返回)
// 无参无返回
Method m1 = c.getMethod("m1", null);
m1.invoke(obj, null);
// 无参有返回
Method m2 = c.getDeclaredMethod("m2", null);
System.out.println(m2.invoke(obj, null));
// 有参数无返回
Method m3 = c.getDeclaredMethod("m3", Integer.class, String.class, String.class);
m3.invoke(obj, 1, "ddd", "sss");
// 有参数有返回
Method m4 = c.getDeclaredMethod("m4", String.class, String.class);
System.out.println(m4.invoke(obj, "你好", "boy"));
}
}
全部输出的结果为:
pid
pname
psex
m4
m1
m2
m3
com.reflect.Noarguments
com.reflect.Have
m1
m2
1
ddd
sss
你好boy
以上就是我这次分享的反射一些简单的用法。
本人初学,写的比较简陋,不太全面 多多理解!!!!