使用java反射机制,获取已存在类的信息

发布时间:2026/9/21 9:52:23
使用java反射机制,获取已存在类的信息 使用java反射机制获取已存在类的信息反射就是把java类中的各种成分映射成一个个的Java对象例如一个类有成员变量、方法、构造方法、包等等信息利用反射技术可以对一个类进行解剖把个个组成部分映射成一个个对象。其实一个类中这些成员方法、构造方法、在加入类中都有一个类来描述如图是类的正常加载过程反射的原理在与class对象。熟悉一下加载的时候Class对象的由来是将class文件读入内存并为之创建一个Class对象。代码示例1.首先构建Students类package com.whtcc.person; public class Students { private String stu_name; private int stu_age; public Students() { super(); // TODO Auto-generated constructor stub } public Students(String stu_name, int stu_age) { super(); this.stu_name stu_name; this.stu_age stu_age; } public String getStu_name() { return stu_name; } public void setStu_name(String stu_name) { this.stu_name stu_name; } public int getStu_age() { return stu_age; } public void setStu_age(int stu_age) { this.stu_age stu_age; } public void study(int a,int b) { System.out.println(学生正在学习。。。计算ab(ab)); } }2.创建测试类package com.whtcc.test; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.util.ArrayList; import java.util.Arrays; import com.whtcc.person.Students; public class Main { public static void main(String[] args) { try { //通过反射获得Students对象 Class? stuClassClass.forName(com.whtcc.person.Students); Students stu2(Students) stuClass.newInstance(); //测试是否能调用Students类的study方法 stu2.study(3,2); //获取name_field属性对象 Field name_fieldstuClass.getDeclaredField(stu_name); //设置name_field属性对象取消权限检查 name_field.setAccessible(true); //创建Students对象stu1 Students stu1new Students(Mary,15); //打印stu1的name属性值 String namestr(String)name_field.get(stu1); System.out.println(stu1的namenamestr.toString()); //修改stu1的name属性值为jike并输出至控制台 name_field.set(stu1, jike); String newnamestr(String)name_field.get(stu1); System.out.println(stu1的新namenewnamestr.toString()); //获取age_field属性对象及相关操作 Field age_fieldstuClass.getDeclaredField(stu_age); age_field.setAccessible(true); System.out.println(stu1对象的age值age_field.getInt(stu1)); //获取age_field属性修饰符类型 int modifierage_field.getModifiers(); System.out.println(stu1对象的age值修饰符Modifier.toString(modifier)); //获取age_field属性名称 System.out.println(stu1对象的age值属性名称age_field.getName()); System.out.println(-----------------------------------------------------------); /* * *通过反射获取并调用对象的方法以study方法为例 */ Method methodstuClass.getMethod(study,int.class,int.class); //获取study方法的修饰符 System.out.println(study方法的权限修饰符是Modifier.toString(method.getModifiers())); //获取study方法的返回值类型 System.out.println(study方法的返回值类型是method.getReturnType().getName()); //获取study方法的参数列表 Class?[] parameterTypesmethod.getParameterTypes(); System.out.println(参数列表Arrays.toString(parameterTypes)); //调用study方法 method.invoke(stu1, 6,5); //更改stu1对象的属性 Method setnameMethod stuClass.getDeclaredMethod(setStu_name, String.class);//第一个参数是方法名称第二个参数是方法参数类型的类类型 setnameMethod.invoke(stu1, tony); System.out.println(stu1的新名字是stu1.getStu_name()); /* * 拓展使用反射调用ArrayList类的方法 */ Class? claClass.forName(java.util.ArrayList); Method method2cla.getMethod(add, Object.class); ArrayListString alt(ArrayListString) cla.newInstance(); method2.invoke(alt, we are family); System.out.println(alt); //通过反射获取构造器对象 Constructor? constructorsstuClass.getConstructor(); Constructor? constructors1stuClass.getConstructor(String.class,int.class); Students s1(Students) constructors.newInstance(); Students s2(Students) constructors1.newInstance(fa,19); } catch (Exception e) { e.printStackTrace(); } } }

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询