java学习----反射
目录
一、什么是反射
反射:反射是指计算机程序在运行时(Run time)可以访问、检测和修改它本身状态或行为的一种能力
它的作用是:
反射在实际开发中的运用主要是在编写第三方
二、反射的运用
上面涉及到反射是在
编译后我们会得到一个以
那么就简单了解一下
在
接下来就看看反射的核心类
创建反射(Class)对象有三中方法
对象名
获取的
下面看一个反射的实例吧:

package com.demo.forname; public class Student { private String name; private Integer id; public int age; private Student(int id){ this.id=id; } public Student(){ System.out.println("执行了无参的构造方法"); } public Student(String name, Integer id, int age) { super(); this.name = name; this.id = id; this.age = age; } @Override public String toString() { return "Student [name=" + name + ", id=" + id + ", age=" + age + "]"; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }

package com.demo.forname; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; public class ReflectNewObject { public static void main(String[] args) throws Exception { //获取反射对象 Class<Student> obj = (Class<Student>) Class.forName("com.demo.forname.Student"); //调用无参构造方法 Student stu1 = obj.newInstance(); //选择需要调用的构造方法 Constructor constructor = obj.getConstructor(String.class,Integer.class,Integer.TYPE); //有Constructor对象调用构造方法 Student stu2 = (Student)constructor.newInstance("张三",23,23); System.out.println(stu2); //------------------------------------------------------------------------------------ //获取所有的属性(只含公开属性,包含父类的属性) Field[] f = obj.getFields(); for (Field field : f) { System.out.println(field); } System.out.println("-----------------------------"); //获取指定字段的属性(只包含公开属性,包含父类的属性) Field f3 = obj.getField("name"); System.out.println(f3); System.out.println("-----------------------------"); //获取当前类中指定的属性(只包含本类) Field f4 = obj.getDeclaredField("name"); System.out.println(f4); System.out.println("----------------------------"); //获取本类所有的属性 Field[] f2 = obj.getDeclaredFields(); for (Field field : f2) { System.out.println(field); } System.out.println("****************************"); //------------------------------------------------------------------------------------- //获取所有的方法(只包含公开的,包含父类(别忘了Object类中的方法)) Method[] m1 = obj.getMethods(); for (Method method : m1) { System.out.println(method); } System.out.println("****************************"); //获取本类中所有的方法(不包含父类) Method[] m2 = obj.getDeclaredMethods(); for (Method method : m2) { System.out.println(method); } System.out.println("****************************"); //获取指定方法(需要公开的方法,不包含父类)后面的参数类型写该方法的参数的Class对象,如果没有就写null或不写 Method m3 = obj.getMethod("toString"); System.out.println(m3); //获取当前类中的指定方法(所有方法) System.out.println("****************************"); Method m4 = obj.getDeclaredMethod("tec",int.class,String.class); //由于这里的m4方法是私有的这里利用反射我们可以让方法变成公开的来执行 m4.setAccessible(true); System.out.println(m4); //调用方法(,这里方法没有参数则写null,但是第一个参数必须是这个方法的对象) m4.invoke(stu1,1,"789"); } }
3、总结
这里
写代码是非常繁琐的。所以善用
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· 因为Apifox不支持离线,我果断选择了Apipost!