反射

来源:互联网 发布:植物大战僵尸2 知乎 编辑:程序博客网 时间:2024/06/05 04:42

1、获取实现该类的所有接口及父类

@Test
public void test1(){
Class clazz=Person.class;
System.out.println(clazz.getSuperclass().getSimpleName());
//实现的接口
Class clazzInterface[]=clazz.getInterfaces();
for (Class c : clazzInterface) {
System.out.println(c.getSimpleName());
}
}

2、获取该类所有的构造方法,并执行

@Test
public void test2(){
Class clazz=Person.class;
Constructor constructor[]=clazz.getDeclaredConstructors();
for (Constructor c : constructor) {
System.out.println(c.getModifiers());
Class clazzType[]=c.getParameterTypes();
for (Class cc : clazzType) {
System.out.println(" "+cc.getSimpleName());
}
}
//调用构造方法(使用构造方法进行实例化对象)
try {
//clazz.newInstance();//调用无参构造
//调用有参构造
Constructor constru=clazz.getDeclaredConstructor(Integer.class,String.class,String.class);
constru.newInstance(1,"张三","男");
} catch (Exception e) {
e.printStackTrace();

}

3、根据类对象 获取 类的所有的方法

@Test
public void test3(){
//获取所有的方法
Class clazz=Person.class;
Method methods[]=clazz.getDeclaredMethods();
System.out.println(methods.length);
for (Method method : methods) {
//获取每个方法的名字
System.out.println(method.getName());

//每个方法的返回值类型
System.out.println("  "+method.getReturnType().getName());

//每个方法的修饰符
System.out.println("  "+method.getModifiers());

//获取每个方法的参数列表
Class[] classType=method.getParameterTypes();
for (Class c : classType) {
System.out.println("   "+c.getSimpleName());
}
}
}

4、根据类对象 获取 类的属性

@Test
public void test4(){
//之前
Person person=new Person();
//person.setPid(1);
Person person2=new Person();
//person2.setPid(100);
Class clazz=Person.class;
Field[] fields=clazz.getFields();//只能获取public修饰的属性
Field[] fields2=clazz.getDeclaredFields();//获取所有的属性(包括私有)
for (Field field : fields2) {
//获取所有属性的属性名
System.out.println(field.getName());
}

System.out.println(fields2.length);
}

5、 根据类对象 获取 类名(全限定名  包名)
@Test
public void test5(){
Class clazz=Person.class;
//获取全限定名
System.out.println(clazz.getName());
//获取类名(不包括包名)
System.out.println(clazz.getSimpleName());
//获取包名
System.out.println(clazz.getPackage().getName());
}

6、获取类对象
@Test
public void test6() {
try {
// 1.实体类.class
// Class clazz=Person.class;
// 2.对象.getClass
// Person person=new Person();
// Class clazz=person.getClass();
// 3.Class.forName()
//Class clazz = Class.forName("com.zking.entity.Person");
//4.通过类加载的loadClass
// ClassLoader classLoader=Person.class.getClassLoader();
// Class clazz =classLoader.loadClass("com.zking.entity.Person");
//5.通过子类.class.getSuperClass()
// Class clazz =Son.class.getSuperclass();
// System.out.println(clazz);

// [6].获取包装类的类对象
Class clazz=Integer.class;
System.out.println(clazz);

} catch (Exception e) {
e.printStackTrace();
}
}

原创粉丝点击