反射的应用

news/2025/1/15 17:16:58/

1、获取Class类对象

java">//1、Class.forName(类的全路径)
Class<?> aClass1 = Class.forName("com.itheima.d2_reflect.Student");
//2、类.class
Class<Student> aClass2 = Student.class;
//3、对象.getClass()
Class<? extends Student> aClass3 = new Student().getClass();

2、获取Student类的构造器对象

java">Class<Student> aClass = Student.class;
//返回单个构造器对象(只能拿public的)
Constructor<?> constructor1 = aClass.getConstructor();
//返回单个构造器对象,存在就能拿到
Constructor<?> declaredConstructor = aClass.getDeclaredConstructor(String.class,int.class);
//返回所有构造器对象的数组(只能拿public的)
Constructor<?>[] constructors = aClass.getConstructors();
//返回所有构造器对象的数组,存在就能拿到
Constructor<?>[] declaredConstructors = aClass.getDeclaredConstructors();//设置为true,表示取消访问检查,进行暴力反射
declaredConstructor.setAccessible(true);
//根据指定的构造器创建对象
Student student = (Student)declaredConstructor.newInstance("小佳",19);

3、获取Student类中的各个属性Field对象

java">Class<Student> aClass = Student.class;
//返回所有成员变量对象的数组(只能拿public的)
Field[] fields = aClass.getFields();
//返回所有成员变量对象的数组,存在就能拿到
Field[] declaredFields = aClass.getDeclaredFields();
//返回单个成员变量对象(只能拿public的)
Field gender1 = aClass.getField("gender");
//返回单个成员变量对象,存在就能拿到
Field name2 = aClass.getDeclaredField("name");//设置与获取值get、set
Student student = aClass.newInstance();
//name是private属性,设置为true,表示取消访问检查,进行暴力反射
name2.setAccessible(true);
name2.set(student,"小蒋");

4、获取Student类中的各个方法Method对象

java">Class<Student> aClass = Student.class;
//返回所有成员方法对象的数组(只能拿public的)
Method[] methods = aClass.getMethods();
//回所有成员方法对象的数组,存在就能拿到
Method[] declaredMethods = aClass.getDeclaredMethods();
//返回单个成员方法对象(只能拿public的)
Method getGender = aClass.getMethod("getGender");
//返回单个成员方法对象,存在就能拿到
Method show = aClass.getDeclaredMethod("show");
//第二个参数为setGender()的参数类型
Method setGender = aClass.getDeclaredMethod("setGender", String.class);//方法调用:public方法与private方法
Student student1 = aClass.newInstance();
String str_toString = (String)toString.invoke(student1);
System.out.println("str_toString = " + str_toString);
//方法调用:public有参方法
setGender.invoke(student1,"男");
System.out.println("student1 = " + student1);//方法调用:show是private方法,进行暴力反射
show.setAccessible(true);
show.invoke(student1);

http://www.ppmy.cn/news/1526712.html

相关文章

OpenHarmony鸿蒙( Beta5.0)RTSPServer实现播放视频详解

鸿蒙开发往期必看&#xff1a; 一分钟了解”纯血版&#xff01;鸿蒙HarmonyOS Next应用开发&#xff01; “非常详细的” 鸿蒙HarmonyOS Next应用开发学习路线&#xff01;&#xff08;从零基础入门到精通&#xff09; “一杯冰美式的时间” 了解鸿蒙HarmonyOS Next应用开发路…

Java学习线路(2024版)

Java 作为一门成熟、强大且灵活的编程语言&#xff0c;广泛应用于企业级开发、Web开发、移动开发、大数据等领域。随着技术的不断演进&#xff0c;Java 生态系统不断扩展&#xff0c;学习路径也随之更新。如果你想全面掌握 Java&#xff0c;从基础开始到精通&#xff0c;再到最…

【Elasticsearch系列六】系统命令API

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

一起对话式学习-机器学习02——机器学习方法三要素

【一】核方法 首先补充一下核方法&#xff0c;这应是机器学习分类中的内容。 什么是核方法呢&#xff1f;听起来很高级&#xff0c;但理解很简单&#xff1a; 官方定义&#xff1a;核方法是使用核函数表示和学习非线性模型的一种机器学习方法&#xff0c;可以用于监督学习和非监…

初学Linux(学习笔记)

初学Linux&#xff08;学习笔记&#xff09; 前言 本文跳过了Linux前期的环境准备&#xff0c;直接从知识点和指令开始。 知识点&#xff1a; 1.目录文件夹&#xff08;Windows&#xff09; 2.文件内容属性 3.在Windows当中区分文件类型是通过后缀&#xff0c;而Linux是通过…

C++ ——string的模拟实现

目录 前言 浅记 1. reserve&#xff08;扩容&#xff09; 2. push_back&#xff08;尾插&#xff09; 3. iterator&#xff08;迭代器&#xff09; 4. append&#xff08;尾插一个字符串&#xff09; 5. insert 5.1 按pos位插入一个字符 5.2 按pos位插入一个字符串 …

JVM面试真题总结(九)

文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 描述CMS垃圾收集的工作过程 CMS&#xff08;Concurrent Mark Swee…

Eclipse 数据空间组件(EDC)项目介绍

探索数据共享新时代——Eclipse 数据空间组件&#xff08;EDC&#xff09;项目介绍 在当今数字经济的背景下&#xff0c;数据成为了新的“石油”。但与石油不同的是&#xff0c;数据可以无限共享且再生。然而&#xff0c;如何在保持数据主权的前提下实现高效、安全的数据共享&…