(一)实验目的
1、掌握JAVA中的反射机制;
2、掌握通过反射实现对象构造的方法;
3、掌握通过反射调用对象的成员的方法;
4、熟练利用反射实现项目配置。
(二)实验内容和步骤
自定义一个学生类,该类有姓名、性别、所属班级三个成员变量,其中所属班级为私有成员变量;有设置和获取三个成员变量的set和get成员方法,其中所有的set方法均为私有方法,请通过反射产生一个类的对象,并将此对象的姓名设置为"张三丰",性别设置为"男",所属班级设置为"外包",最后将此对象输出到控制台。
💖 Student.java
java
// package javaStudy.实验14_反射; // 全限定类名中的包名:javaStudy.实验14_反射
import java.lang.reflect.Field;
public class Student
{
private String name;
private String gender;
private String classInfo;
// 私有构造方法
private Student()
{
}
// 私有设置姓名方法
private void setName(String name)
{
this.name = name;
}
// 私有设置性别方法
private void setGender(String gender)
{
this.gender = gender;
}
// 私有设置班级方法
private void setClassInfo(String classInfo)
{
this.classInfo = classInfo;
}
// 公共获取姓名方法
public String getName()
{
return name;
}
// 公共获取性别方法
public String getGender()
{
return gender;
}
// 公共获取班级方法
public String getClassInfo()
{
return classInfo;
}
@Override
public String toString()
{
return "Student [name=" + name + ", gender=" + gender + ", classInfo=" + classInfo + "]";
}
public static void main(String[] args) throws Exception
{
// 获取Student类的Class对象
// Class.forName(全限定类名,即 包名+类名 的字符串)
// javaStudy.实验14_反射 根据自己代码第一行的包名修改即可
Class clazz = Class.forName("javaStudy.实验14_反射.Student");// 不建议带中文
// Class clazz = Student.class;
// 创建Student类的实例
Student student = (Student) clazz.getDeclaredConstructor().newInstance();
// 获取Student类的成员变量
Field nameField = clazz.getDeclaredField("name");
Field genderField = clazz.getDeclaredField("gender");
Field classInfoField = clazz.getDeclaredField("classInfo");
// 设置成员变量可访问
nameField.setAccessible(true);
genderField.setAccessible(true);
classInfoField.setAccessible(true);
// 设置成员变量的值
nameField.set(student, "张三丰");
genderField.set(student, "男");
classInfoField.set(student, "外包");
System.out.println(student);
}
}
(三)存在的问题、解决办法及小结
写全限定类名,不然程序会抛出