一、创建一个实体类
package com.yy.entity;
public class Student {
private String name;
private int age;
private String add;
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 getAdd() {
return add;
}
public void setAdd(String add) {
this.add = add;
}
private void task(String task){
System.out.println(name + "开始做" + task + "作业");
}
private void task1(int task){
System.out.println(name + "做了" + task + "门作业");
}
private void empty(){
System.out.println(name + "不做作业了");
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + ", add=" + add + "]";
}
}
二、测试类
package com.yy.test;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import com.yy.entity.Student;
public class Demo {
public static void main(String[] args) throws Exception {
//获取Student的Class对象
//1、通过Class.forName()方法加载字符串,就可以得到该字符串做代表的Class对象
Class<?> clazz = Class.forName("com.yy.entity.Student");
/*2、调用Student类的class属性
Class<?> clazz = Student.class;*/
/*3、调用Student实例的getClass()方法
Student stu = new Student();
Class<?> clazz = stu.getClass();*/
//获取该类中的所有属性
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
// System.out.println(field);
// System.out.println("修饰符:" + Modifier.toString(field.getModifiers()));
// System.out.println("类型:" + field.getType());
// System.out.println("属性名:" + field.getName());
}
//获取该类中的所有方法
Method[] methods = clazz.getDeclaredMethods();
for (Method method : methods) {
// System.out.println(method);
// System.out.println("修饰符:" + Modifier.toString(method.getModifiers()));
// System.out.println("方法名:" + method.getName());
// System.out.println("返回类型:" + method.getReturnType());
Class<?>[] clazzes = method.getParameterTypes();
for (Class<?> class1 : clazzes) {
// System.out.println("参数类型:" + class1);
}
}
//通过Class对象创建对象
Student student = (Student) clazz.newInstance();
//获取属性名为name的字段对象,重新设置值
Field name = clazz.getDeclaredField("name");
//字段属性为private,设置为可以访问
name.setAccessible(true);
//设置name的值
name.set(student, "张三");
//通过Class对象获取名为task、参数类型为String的方法对象
Method task = clazz.getDeclaredMethod("task", String.class);
//方法属性为private,设置为可以访问
task.setAccessible(true);
//调用task()方法
task.invoke(student, "化学");
//通过Class对象获取名为task1、参数类型为int的方法对象
Method task1 = clazz.getDeclaredMethod("task1", int.class);
//方法属性为private,设置为可以访问
task1.setAccessible(true);
//调用task1()方法
task1.invoke(student, 1);
//通过Class对象获取名为task、无参数类型的方法对象
Method empty = clazz.getDeclaredMethod("empty");
//方法属性为private,设置为可以访问
empty.setAccessible(true);
//调用empty()方法
empty.invoke(student);
}
}
三、结果显示