反射

反射机制

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

1.获取Class对象的三种方式

  1. 类名.class
  2. Class.forName(全路径类名)
  3. 类的实例化对象.getClass()

2.通过反射获取构造方法、成员变量、成员方法

通过反射获取构造方法、成员变量、成员方法的方法基本一致,所以只把通过反射获取构造方法的方法全部列举。
Constructor getDeclaredConstructor(Class… parameterTypes)
获取此 Class 对象所表示的类的指定构造方法(包括私有和默认修饰)

Constructor[] getDeclaredConstructors()
获取此 Class 对象表示的类声明的所有构造方法

Constructor getConstructor(Class… parameterTypes)
获取此 Class 对象所表示的类的指定公共构造方法

Constructor<?>[] getConstructors()
获取此 Class 对象所表示的类的所有公共构造方法

2.1 通过反射获取构造方法

public class Reflect_Constructor {
    public static void main(String[] args) throws Exception {
        //获取Class对象
        Class<?> c = Class.forName("getclassobject.Student");
      //Constructor[] getDeclaredConstructors()  获取此 Class 对象表示的类声明的所有构造方法。
        Constructor<?>[] constructors = c.getConstructors();
        for (Constructor<?> constructor : constructors) {
            System.out.println(constructor);
        }
       //Constructor<T> getConstructor(Class... parameterTypes)  获取此 Class 对象所表示的类的指定公共构造方法。
        Constructor<?> con = c.getConstructor(String.class, int.class, String.class);
        //通过获取的构造方法创建对象
        Object o = con.newInstance("张三", 22, "男");
        System.out.println(o);
        //Constructor getDeclaredConstructor(Class... parameterTypes)  获取此 Class 对象所表示的类的指定构造方法(包括私有和默认修饰)
        Constructor<?> dc = c.getDeclaredConstructor(String.class);
        //如果构造方法的权限修饰符为private,则需要暴力反射才能创建对象  
        //public void setAccessible​(boolean flag):值为true,取消java语言访问权限检查
        dc.setAccessible(true);
        Object s = dc.newInstance("男");
        System.out.println(s);
    }
}

2.2 通过反射获取成员变量

public class Reflect_Field {
    public static void main(String[] args) throws Exception {
        Student stu=new Student();
        Class<? extends Student> c = stu.getClass();
        //public Field getDeclaredField(String name) 获取由此Class对象表示的类或接口的指定声明字段
        //传入的参数为成员变量的名称
        Field fieldName = c.getDeclaredField("name");
        fieldName.setAccessible(true);
        //设置stu对象的name为张三
        fieldName.set(stu,"张三");
        //获取stu对象的name属性值
        Object o1 = fieldName.get(stu);
        System.out.println(o1);
    }
}

2.3 通过反射获取成员变量

public class Reflect_Method {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
        //获取class对象
        Class<Student> c = Student.class;
        //获取无参构造方法
        Constructor<?> dc = c.getDeclaredConstructor();
        //实例化对象
        Object obj = dc.newInstance();
        //获取方法(参数为要获取的方法名)
        Method method = c.getDeclaredMethod("publicMethod");
        //调用obj对象的publicMethod方法
        method.invoke(obj);
        System.out.println("----------");
        //获取方法,该方法需要一个String类型的参数
        Method method1 = c.getDeclaredMethod("method", String.class);
        method1.setAccessible(true);
        //调用obj对象的method方法,并传入字符串"reverse"
        Object reverse = method1.invoke(obj, "reverse");
        System.out.println(reverse);
    }
}
基于开源大模型的教学实训智能体软件,帮助教师生成课前备课设计、课后检测问答,提升效率与效果,提供学生全时在线练习与指导,实现教学相长。 智能教学辅助系统 这是一个智能教学辅助系统的前端项目,基于 Vue3+TypeScript 开发,使用 Ant Design Vue 作为 UI 组件库。 功能模块 用户模块 登录/注册功能,支持学生和教师角色 毛玻璃效果的登录界面 教师模块 备课与设计:根据课程大纲自动设计教学内容 考核内容生成:自动生成多样化考核题目及参考答案 学情数据分析:自动化检测学生答案,提供数据分析 学生模块 在线学习助手:结合教学内容解答问题 实时练习评测助手:生成随练题目并纠错 管理模块 用户管理:管理员/教师/学生等用户基本管理 课件资源管理:按学科列表管理教师备课资源 大屏概览:使用统计、效率指数、学习效果等 技术栈 Vue3 TypeScript Pinia 状态管理 Ant Design Vue 组件库 Axios 请求库 ByteMD 编辑器 ECharts 图表库 Monaco 编辑器 双主题支持(专业科技风/暗黑风) 开发指南 # 安装依赖 npm install # 启动开发服务器 npm run dev # 构建生产版本 npm run build 简介 本项目旨在开发一个基于开源大模型的教学实训智能体软件,帮助教师生成课前备课设计、课后检测问答,提升效率与效果,提供学生全时在线练习与指导,实现教学相长。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值