反射获得类元素的方法有三种:
1,通过类的静态方法
Class clz=类名.class;
2,通过对象获得
Class clz=new 类名().getClass();
3,通过全程名获得
Class clz=Class.forName("com.xx.fanshe.Demo1");//以下程序为例
一,测试类,利用反射调用Demo1类中的属性,方法和构造方法
package com.xx.fanshe;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
public class Test {
public static void main(String[] args) throws Exception{
GZF();
FF();
Field();
}
//获得类的属性
@SuppressWarnings({ "rawtypes" })
private static void Field() throws Exception {
//获得类元素信息
Class clz=Demo1.class;
//构建对象
Demo1 demo1=(Demo1) clz.newInstance();
//获得公开的name属性
java.lang.reflect.Field name = clz.getField("name");
//调用name属性
Object value = name.get(demo1);
System.out.println(value);
//获得私有的属性
java.lang.reflect.Field age = clz.getDeclaredField("age");
//将私有的设置成可访问的
age.setAccessible(true);
//调用age
Object value2 = age.get(demo1);
System.out.println(value2);
}
//获得类的方法
@SuppressWarnings("unchecked")
private static void FF() throws Exception {
//获得类元素信息
@SuppressWarnings("rawtypes")
Class clz=Demo1.class;
//构建对象
Demo1 demo1=(Demo1) clz.newInstance();
//Demo1 demo1=new Demo1();
//通过clz类获得公开的方法
//Method method = clz.getMethod("play", null);
Method method = clz.getMethod("play");
//通过demo1对象调用方法
Object value = method.invoke(demo1);
System.out.println(value);
//获得私有的方法,null代表没有传进参数
//Method method2 = clz.getDeclaredMethod("eat", null);
Method method2 = clz.getDeclaredMethod("eat");
//设置成可以获得,可以访问
method2.setAccessible(true);
//调用方法
Object value2 = method.invoke(demo1);
System.out.println(value2);
}
//获得类的构造方法
@SuppressWarnings({ "unchecked", "rawtypes" })
private static void GZF() throws Exception {
//获得类元素信息
Class clz=Demo1.class;
//构建对象
Demo1 demo1=(Demo1) clz.newInstance();
System.out.println(demo1);
//获得有参构造方法
Constructor c = clz.getConstructor(String.class,int.class);
//调用构造方法
Object wuhan = c.newInstance("吴晗",19);
System.out.println(wuhan);
}
}
二,Demo1类
package com.xx.fanshe;
public class Demo1 {
public String name = "吴晗";
private int age = 12;
public Demo1() {
}
public Demo1(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String play(){
return "changge";
}
private String eat(){
return "byebye";
}
@Override
public String toString() {
return "Demo1 [name=" + name + ", age=" + age + "]";
}
}