package com.xintouyun.reflect;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
public class ReflectTest {
public static void main(String[] args) throws Exception {
//1.获取类名三种方法
//1.1
Class<?> clazz=Class.forName("com.xintouyun.reflect.entity.Student");//获取class的方法一
//clazz.getName();
System.out.println(clazz.getSimpleName());
/*//1.2
Class<?> clazz1 = Student.class;
System.out.println(clazz1.getName());*/
//1.3
/*Student student = new Student();
Class<?> clazz2 = student.getClass();
System.out.println(clazz2.getName());*/
//2.获取属性(声明的所有的属性,所有的公共的属性,获取一个声明的属性,获取一个生命的公共的属性)
//2.1获取一个声明的所有的属性
Field field1=clazz.getDeclaredField("num");
field1.getModifiers();
System.out.println("获取一个声明的所有的属性"+Modifier.toString(field1.getModifiers()));
//2.2获取一个声明的所有的公共的属性
/*Field field=clazz.getField("id");//获取id的属性
field.getModifiers();//获取id的修饰符
System.out.println("获取一个声明的所有的公共的属性"+Modifier.toString(field.getModifiers()));*/
//2.3获取声明的所有的属性
/*Field[] fields2=clazz.getDeclaredFields();
for (Field field : fields2) {
int modifiers = field.getModifiers();
Class<?> type = field.getType();
String name = field.getName();
System.out.println("获取声明的所有的属性"+Modifier.toString(modifiers)+" "+type+" "+name);
}*/
//2.4获取所有的公共的属性
/*Field[] fields3=clazz.getFields();
for (Field field : fields3) {
System.out.println("获取所有的公共的属性"+Modifier.toString(field.getModifiers()));
}*/
//2.4.1创建对象
Object obj= clazz.newInstance();
//设置可以获取私有属性
field1.setAccessible(true);
//给属性赋值
field1.set(obj, 1);
//获取属性值
int fv = (int)field1.get(obj);
System.out.println("num设置的值为"+fv);
//3获取方法
//3.1获取所有的声明的方法
Method[] methods=clazz.getDeclaredMethods();
System.out.println("获取所有的声明的方法");
for (Method method : methods) {
int modifiers=method.getModifiers();
System.out.print(Modifier.toString(modifiers)+" ");
Class<?> returnType=method.getReturnType();
System.out.print(returnType.getSimpleName()+" ");
String name = method.getName();
System.out.print(name);
System.out.print("(");
Class<?>[] parameters = method.getParameterTypes();
for (Class<?> parameter : parameters) {
System.out.print(parameter.getSimpleName() +",");
}
System.out.println(")");
}
//使用反射来调用一个方法
Method setmethod=clazz.getDeclaredMethod("setNum", int.class);
setmethod.invoke(obj, 22);
Method getmethod=clazz.getDeclaredMethod("getNum");
int i=(int)getmethod.invoke(obj);
System.out.println("反射调用get/set方法来设置num值:"+i);
}
}
package com.xintouyun.reflect.entity;
public class Student {
private int num;
private String name;
public int id;
String banji;
protected int grade;
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getBanji() {
return banji;
}
public void setBanji(String banji) {
this.banji = banji;
}
public int getGrade() {
return grade;
}
public void setGrade(int grade) {
this.grade = grade;
}
}