Java中的反射在框架底层用的很多,最近在复习,整理了一下常用的方法示例如下:
首先,我们随便写一个类,因为我们要通过反射来读取该类的属性和方法。这里我新建了一个student类
public class Student {
private int age;
private String name;
private String address;
private void siyou(){
System.out.println("这是一个私有的方法siyou");
}
public void draw(String aa){
System.out.println(aa);
}
public void print(){
System.out.println("这是一个打印方法 print");
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
反射获取该类的属性和方法的示例如下:
public class FanShe {
public static void main(String[] args) {
try {
Class cls = Class.forName("com.wxw.fanshe.Student");
Field[] filed = cls.getDeclaredFields();//获取所有的属性
System.out.println("========所有的属性名称=================");
for(Field s : filed){//循环列出该类的所有属性
System.out.println(s.getName());
}
Method[] method = cls.getDeclaredMethods();//获取所有的方法
System.out.println("========所有的方法名称=================");
for(Method m : method){
System.out.println(m.getName());
}
System.out.println("========用反射来new对象并执行对象方法=================");
Object obj = cls.newInstance();//创建对象
Method method1 = cls.getMethod("print");//获取对象中一个名叫print的方法
method1.invoke(obj);
System.out.println("========执行对象中有参数的方法=================");
Method method2 = cls.getMethod("draw",String.class);//获取对象中一个名叫print的方法
method2.invoke(obj,"执行对象中有参数的方法");
System.out.println("=======调用一个普通的私有方法=================");
Method symethod = cls.getDeclaredMethod("siyou",null);
//正常的反射只能调用公共的方法,如果要调用私有方法,那么需要设置这个值
symethod.setAccessible(true);//设置之后在反射调用中将不会去检查这个权限
symethod.invoke(obj,null);
//获取构造方法也是一样的,可以自己去写
} catch (Exception e) {
e.printStackTrace();
}
}
}
执行结果如下: