操作类(Person):
package cn.ouyang.test.entity;
public class Person {
private String name;
private int 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 void run(){
System.out.println(name+"正在Running!");
}
}
使用反射和内省操作:
package cn.ouyang.test.test;
import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.MethodDescriptor;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Array;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import org.junit.Test;
public class Test1 {
// JAVA中的内省
@Test
public void test() throws Exception {
Object obj =Class.forName("cn.ouyang.test.entity.Person")
.newInstance();
BeanInfo bf =Introspector.getBeanInfo(obj.getClass(), Object.class);
PropertyDescriptor[] pds =bf.getPropertyDescriptors();
for (PropertyDescriptor pd :pds) {
System.out.println("属性"+ pd.getName());
if(pd.getName().equals("name")) {
pd.getWriteMethod().invoke(obj,"小明");
}
}
MethodDescriptor[] mds =bf.getMethodDescriptors();
for (MethodDescriptor md : mds){
System.out.println("方法"+ md.getName());
Method method= md.getMethod();
if(method.getName().equals("run")) {
method.invoke(obj,null);
}
}
}
// JAVA中的反射
@Test
public void test1() throws Exception {
Class clazz =Class.forName("cn.ouyang.test.entity.Person");
Object obj =clazz.newInstance();
System.out.println("所有方法");
Method[] mds =clazz.getDeclaredMethods();
for (Method method : mds){
System.out.println(method.getName());
}
System.out.println("所有属性");
Field[] filds =clazz.getDeclaredFields();
for (Field field : filds) {
System.out.println(field.getName());
}
System.out.println("构造函数");
Constructor[] cs=clazz.getConstructors();
for (Constructor constructor :cs) {
System.out.println(constructor.getName());
}
System.out.println(clazz.getConstructor(null));//单个
System.out.println("super类");
System.out.println(clazz.getSuperclass());
}
//反射方法
@Test
public void test3() throws Exception{
Class clazz =Class.forName("cn.ouyang.test.entity.Person");
Object obj =clazz.newInstance();
System.out.println(obj);
ConstructorduixiangObject=clazz.getConstructor(newClass[]{String.class,int.class});
Objectnobj=duixiangObject.newInstance(new Object[]{"ddd",22});
Fieldfield=clazz.getDeclaredField("name");
field.setAccessible(true);//暴力反射(获得权限)
System.out.println(field);
//设置值
field.set(nobj, "dddd");
System.out.println(field.get(nobj));
//得到方法
Methodmethod=clazz.getMethod("run", new Class[]{});
System.out.println(method.getReturnType());
method.invoke(nobj,null);
//得到静态方法
MethodstMethod=clazz.getMethod("running", null);
stMethod.invoke(null,null);
}
//动态创建数组1
@Test
public void test4() throws Exception{
Classclazz=Class.forName("java.lang.Integer");
Objectarr=Array.newInstance(clazz,10);
Array.set(arr, 5, 12);
System.out.println(Array.get(arr,5));
}
//动态创建数组2(三维数组)
@Test
public void test5() throws Exception{
Classclazz=Class.forName("java.lang.Integer");
int[] myshuzu={20,22,32};
Objectarr=Array.newInstance(clazz,myshuzu);
Object arr1=Array.get(arr,1);
System.out.println(arr1);//x
Object arr2=Array.get(arr1,2);
System.out.println(arr2);//y
Array.set(arr2, 3, 88);
System.out.println(Array.get(arr2,3));//z
}
}