GDPU Java 天码行空14 反射

(一)实验目的

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);
	}
}

(三)存在的问题、解决办法及小结

写全限定类名,不然程序会抛出

相关推荐
双叶8363 分钟前
(C语言)单链表(1.0)(单链表教程)(数据结构,指针)
c语言·开发语言·数据结构·算法·游戏
想睡hhh6 分钟前
c++概念——入门基础概念
开发语言·c++
爱摄影的程序猿7 分钟前
如何基于 Django-Vue-Admin 快速二次开发?高效后台管理系统实战指南(附完整代码)
vue.js·python·django
肖永威14 分钟前
python列表常用方法大全
开发语言·python
愚润求学20 分钟前
【C++】vector的模拟实现
开发语言·c++·stl·语法
suimeng623 分钟前
基本元素定位(findElement方法)
java·selenium
方渐鸿24 分钟前
【2025】快速部署安装docker以及项目搭建所需要的基础环境(mysql、redis、nginx、nacos)
java·运维·docker·持续部署·dockercompse
程序员鱼皮25 分钟前
2025最新 Java 面经:美团后端面试真实复盘,附答案模板,速速收藏!
java·后端·面试
我要学编程(ಥ_ಥ)31 分钟前
初始JavaEE篇 —— Mybatis-plus 操作数据库
java·java-ee·mybatis·mybatis-plus
凯强同学32 分钟前
第十四届蓝桥杯大赛软件赛省赛Python 大学 C 组:6.棋盘
python·算法·蓝桥杯