反射知识点纪要

1、概念:
将类的各个组成部分封装为其他对象,这就是反射机制
好处:
1.可以在程序运行过程中,操作这些对象
2.可以解耦,提高程序的可扩展性

2、语法:
2.1 获取Class对象
第一种:
Class<类> Class对象名 = 类名.class;
第二种:
对象.getClass() getClass()方法在Object类中定义
第三种:
Class.forName(“全类名”):将字节码文件加载进内存,返回Class对象
2.2 获取成员变量
Field[] getFields(); // 获取所有的public修饰的成员变量
Field getField(String name); // 获取指定名字的public修饰的成员变量
Field[] getDeclaredFields(); // 获取所有的成员变量,不考虑修饰符
Field getDeclaredField(String name); //获取指定名字的所有的成员变量,不考虑修饰符
2.3 Field:成员变量
忽略访问权限修饰符的安全检查
Field对象.setAccessible(true); // 暴力反射
void set(Object obj, Object value); // 设置值,obj对象,value成员变量值
Object get(Object obj);获取值
2.4 获取构造方法
Constructor<?>[] getConstructors(); // 获取所有的public修饰的构造方法
Constructor getConstructors(类<?>… parameterTypes);
Constructor getDeclaredConstructor(类<?>… parameterTypes);
Constructor<?>[] getDeclaredConstrustor(); // 获取所有的构造方法,不考虑修饰符
2.5 Constructor:构造方法
创建对象:T newInstance(Object… initargs)
如果使用空参数构造方法创建对象,操作可以简化:Class对象的newInstance方法
忽略访问权限修饰符的安全检查
Constructor对象.setAccessible(true); // 暴力反射
2.6 获取成员方法
Method[] getMethods();
Method getMethod(String name, 类<?>… parameterTypes);
Method[] getDeclaredMethods();
Method getDeclaredMethod(String name, 类<?>… ParameterTypes);
2.7 Method:成员方法
执行成员方法:Object invoke(Object obj, Object…args);
忽略访问权限修饰符的安全检查
Method对象.setAccessible(true); // 暴力反射
获取方法名称:String getName();
2.8 获取类名
String getName();

    public static void main(String[] args) throws Exception {
        // 获取Person的Class对象
        Class<Person> personClass = Person.class;
        // Field[] getFields();  获取所有的public修饰的成员变量
        Field[] field = personClass.getFields();
        for (Field field1 : field) {
            System.out.println(field1);
        }
        // Field getField(String name); 获取指定名字的public修饰的成员变量
        Field name = personClass.getField("a");
        System.out.println(name);
        // 根据获取到的Field对象设置和获取成员变量
        Person p = new Person();
        name.set(p, "张三");
        Object o = name.get(p);
        System.out.println(o);
        // Field[] getDeclaredFields(); 获取所有的成员变量,不考虑修饰符
        Field[] declaredFields = personClass.getDeclaredFields();
        for (Field declaredField : declaredFields) {
            System.out.println(declaredField);
        }
        // 获取指定名字的所有的成员变量,不考虑修饰符
        Field age = personClass.getDeclaredField("age");
        System.out.println(age);
        // 忽略访问权限修饰符的安全检查
        age.setAccessible(true);
        // 设置和获取成员变量b的值
        age.set(p, 10);
        System.out.println(age.get(p));
        // 获取所有的public修饰的构造方法
        Constructor<?>[] constructors = personClass.getConstructors();
        for (Constructor<?> constructor : constructors) {
            System.out.println(constructor);
        }
        // 获取所有的构造方法,不考虑修饰符
        Constructor<?>[] declaredConstructors = personClass.getDeclaredConstructors();
        for (Constructor<?> declaredConstructor : declaredConstructors) {
            System.out.println(declaredConstructor);
        }
        // 获取指定参数类型的构造方法,不考虑修饰符
        Constructor<Person> declaredConstructors1 = personClass.getDeclaredConstructor(int.class);
        System.out.println(declaredConstructors1);
        // 获取指定参数类型的public修饰的构造方法
        Constructor<Person> constructor = personClass.getConstructor(String.class, int.class);
        System.out.println(constructor);
        // 创建对象
        Person person = constructor.newInstance("张三", 10);
        System.out.println(person);
        // 使用空参构造方法创建对象
        Person person1 = personClass.newInstance();
        System.out.println(person1);

        // 获取成员方法
        // 获取所有的public修饰的成员方法
        Method[] methods = personClass.getMethods();
        for (Method method : methods) {
            System.out.println(method);
        }
        // 获取所有的成员方法,不考虑修饰符
        Method[] declaredMethods = personClass.getDeclaredMethods();
        for (Method declaredMethod : declaredMethods) {
            System.out.println(declaredMethod);
        }

        // 获取指定名称及参数列表的public修饰的成员方法
        Method method = personClass.getMethod("method", String.class);
        System.out.println(method);
        // 执行方法
        method.invoke(p, "张三");
        // 获取方法名称
        String name1 = method.getName();
        System.out.println(name1);

        // 获取类名
        String name2 = personClass.getName();
        System.out.println(name2);
    }

案例:

    public static void main(String[] args) throws Exception {
        // 不能改变该类的任何代码,可以创建任意类的对象,可以执行任意方法
        // 1. 加载配置文件
        // 1.1 创建Properties对象
        Properties pro = new Properties();
        // 1.2 加载配置文件,转换为集合
        // 1,2,1 获取class目录下的配置文件
        ClassLoader classLoader = ReflectTest.class.getClassLoader();
        InputStream is = classLoader.getResourceAsStream("pro.properties");
        pro.load(is);
        // 2. 获取配置文件中定义的数据
        String className = pro.getProperty("className");
        String methodName = pro.getProperty("methodName");
        // 3. 加载该类进内存
        Class cls = Class.forName(className);
        // 4. 创建对象
        Object o = cls.newInstance();
        // 5. 获取方法对象
        Method method = cls.getMethod(methodName);
        // 6. 执行方法
        method.invoke(o);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Java 会议纪要模板主要是为了规范化会议记录的格式,使得记录的内容更加规范、清晰,并且易于查阅。会议纪要模板一般包括以下几部分:会议主题、会议时间、与会人员、会议内容、决策和行动项、下一步计划。 会议主题是指会议讨论的主要内容,需要在会议开始前确定好,并明确在会议纪要的头部。会议时间包括会议开始和结束的时间,以及会议时长。会议参与的人员名单需要一一列出,以便随后查阅。会议内容是会议讨论的所有要点,需要详细记录,并且按照讨论的先后顺序排列。 在会议内容的基础上,需要列出会议达成的决策和行动项。决策是指会议在某个问题上做出的决定,行动项是指会议讨论后需要采取的具体行动。这一部分的记录非常重要,因为决策是实现会议目标的关键,行动项则是决策的具体实施方式。 最后,需要列出下一步的计划,包括什么时间实施行动项,以及谁来负责实施这些行动项。下一步计划是会议的最后环节,也是实现会议目标的关键环节。 综上所述,Java 会议纪要模板是一种规范化会议记录的重要工具。通过使用这种模板,可以让记录的内容更加规范、清晰,并且易于查阅,这对于会议的成功举行具有重要意义。 ### 回答2: Java 会议纪要模板是一种提供了标准格式的文档模板,用于记录和呈现会议讨论和决定的重要内容。该模板的设计旨在帮助会议参与者快速、清晰地记录会议的重要讨论和行动点,并且不需要过多地输入排版格式。 Java 会议纪要模板通常包括以下几个部分:会议主题、日期、出席者和缺席者名单、议程、会议记录、行动点和下一步行动计划。会议记录部分通常包括对会议议题的摘要和有关决定或行动的详细描述。表示行动点时,需要跟踪相应的负责人、截止日期和是否完成等信息。下一步行动计划则包括了会议结束后,参与者需在何时、何地开展下一步行动,并如何追踪和反馈。 使用 Java 会议纪要模板,可以加速会议记录及组织工作,避免人为疏漏和错误,并有助于促进事项的追踪和解决。此外,这种模板具有较好的可适应性,可根据不同类型的会议和组织需求进行调整。 总之,Java 会议纪要模板是一种实用的文档,对于记录会议内容和管理行动点非常有用。该模板的使用能够提高会议效率,节约时间和资源,有助于保持团队成员的一致性,并最大程度地达成共识。 ### 回答3: Java 会议纪要模板可以简化会议纪要的撰写过程,提高会议效率和纪要的准确性。 Java 会议纪要模板通常包括以下几个部分: 1. 会议信息:包括会议的名称、时间、地点、主持人和参会人员等基本信息,可以在会议开始前进行填写。 2. 议程:会议的议程是会议纪要的重要组成部分,它应详细列出会议讨论的各个议题和主要内容,以及每个议题的时间安排。 3. 内容记录:会议纪要的核心部分,应记录会议的讨论内容和决定事项。这些内容应该简明扼要地概括,注重重点,不必过于详尽。 4. 行动追踪:在会议记录中列出每个需要采取行动的事项,包括时间表、责任人和追踪进程等,以便于会议结束后的跟进和跟踪。 5. 附件:会议纪要附件包括会议相关的文件、报告、演示文稿等资料,以便于参会人员查看和了解更多细节。 Java 会议纪要模板的使用可以方便快捷地编写会议纪要,体现出专业、高效和规范的会议记录方式,同时也帮助参会人员更好地把握会议要点、掌握会议决策和行动计划等内容。因此,在企业及机构中,使用Java会议纪要模板已经越来越成为一个传统做法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值