Java反射可以将外部的class文件进行引用,不必完全读懂它的源码就可以获取、创建和使用class文件的各种方法、成员的一种技术。
package cn.fanshe;
import org.junit.jupiter.api.Test;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Parameter;
import java.util.Arrays;
public class Test_Reflect {
@Test
public void getclazz()throws ClassNotFoundException {
Class clazz = Class.forName("cn.fanshe.ReflactStu");
Class clazz1 = ReflactStu.class;
Class clazz2 =new ReflactStu().getClass();
System.out.println(clazz);
System.out.println(clazz1);
System.out.println(clazz2);
}
@Test
public void getConstruct(){
Class clazz=ReflactStu.class;
Constructor[] constructors = clazz.getConstructors();
for (Constructor cc:constructors
) {
System.out.println(cc);
Class[] types = cc.getParameterTypes();
System.out.println(Arrays.toString(types));
}
}
@Test
public void GetMethod()
{
Class aClass =new ReflactStu().getClass();
Method[] methods = aClass.getMethods();
for (Method ms:methods
) {
System.out.println(ms.getName());
Parameter[] parameters = ms.getParameters();
System.out.println(Arrays.toString(parameters));
}
}
@Test
public void GetFiele()
{
try {
Class clazz = Class.forName("cn.fanshe.ReflactStu");
Field[] fields = clazz.getDeclaredFields();
for (Field fs:fields
) {
System.out.println(fs.toString());
System.out.println(fs.getType().getName());
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
@Test
public void CreateObject()throws Exception
{
Class aClass = Class.forName("cn.fanshe.ReflactStu");
Constructor c = aClass.getConstructor(String.class, int.class);
Object o = c.newInstance("jack", 15);
ReflactStu stu = (ReflactStu) o;
System.out.println("学生的年龄是:"+stu.age+",学生的姓名是:"+stu.name);
stu.eat(500);
}
}