Java.反射

目录

1.获取class 的三种方式

2.利用反射获取构造方法

3.利用反射获取成员变量

4.利用反射获取成员方法


1.获取class 的三种方式

全类名怎么找?

全类名=报名+类名

package MyReflect;public class Student {private String id;private String name;private int age;private String address;public Student(String id, String name, int age, String address) {this.id = id;this.name = name;this.age = age;this.address = address;}public Student() {}/*** 获取* @return id*/public String getId() {return id;}/*** 设置* @param id*/public void setId(String id) {this.id = id;}/*** 获取* @return name*/public String getName() {return name;}/*** 设置* @param name*/public void setName(String name) {this.name = name;}/*** 获取* @return age*/public int getAge() {return age;}/*** 设置* @param age*/public void setAge(int age) {this.age = age;}/*** 获取* @return address*/public String getAddress() {return address;}/*** 设置* @param address*/public void setAddress(String address) {this.address = address;}public String toString() {return "Student{id = " + id + ", name = " + name + ", age = " + age + ", address = " + address + "}";}public String toMess(){return id+"    "+name+"    "+age+"    "+address;}
}

package MyReflect;public class Test {public static void main(String[] args) throws ClassNotFoundException {//1  常用Class<?> clazz1= Class.forName("MyReflect.Student");System.out.println(clazz1);//2   当作参数Class clazz2=Student.class;System.out.println(clazz2);System.out.println(clazz1 == clazz2);//3   当有对象的时候Student s1=new Student();Class clazz3=s1.getClass();System.out.println(clazz3);System.out.println(clazz1 == clazz3);}}

2.利用反射获取构造方法

package MyReflect;public class Student{private String name;private int age;public Student() {}protected Student(String name) {this.name = name;}protected Student(int age) {this.age = age;}private  Student(String name, int age) {this.name = name;this.age = age;}/*** 获取* @return name*/public String getName() {return name;}/*** 设置* @param name*/public void setName(String name) {this.name = name;}/*** 获取* @return age*/public int getAge() {return age;}/*** 设置* @param age*/public void setAge(int age) {this.age = age;}public String toString() {return "Student111{name = " + name + ", age = " + age + "}";}}
package MyReflect;import java.lang.reflect.Constructor;public class Test {public static void main(String[] args) throws ClassNotFoundException {//1.获取字节码Class<?> clazz1= Class.forName("MyReflect.Student");System.out.println(clazz1);//2.获取构造方法Constructor[] constructor1= clazz1.getConstructors();for (Constructor constructor:constructor1) {System.out.println(constructor);}}}

package MyReflect;import java.lang.reflect.Constructor;public class Test {public static void main(String[] args) throws ClassNotFoundException {//1  常用Class<?> clazz1= Class.forName("MyReflect.Student");System.out.println(clazz1);Constructor[]constructor1= clazz1.getDeclaredConstructors();for (Constructor constructor:constructor1) {System.out.println(constructor);}}}

package MyReflect;import java.lang.reflect.Constructor;public class Test {public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException {//1  常用Class<?> clazz1= Class.forName("MyReflect.Student");System.out.println(clazz1);Constructor constructor1= clazz1.getDeclaredConstructor(String.class);System.out.println(constructor1);}}

3.利用反射获取成员变量

package MyReflect;import java.lang.reflect.Field;
import java.net.UnknownHostException;public class Test {public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, UnknownHostException {//获取字节码文件Class clazz=Class.forName("MyReflect.Student");System.out.println("class:"+clazz);Field[] fields=clazz.getDeclaredFields();for (Field field : fields) {System.out.println(field);}}}

 

package MyReflect;import java.lang.reflect.Field;
import java.net.UnknownHostException;public class Test {public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, UnknownHostException, NoSuchFieldException {//获取字节码文件Class clazz=Class.forName("MyReflect.Student");System.out.println("class:"+clazz);Field fields=clazz.getDeclaredField("name");//fields.setAccessible(true);System.out.println(fields);}}

对于private的变量,要

namefield.setAccessible(true);
package MyReflect;public class Student{private String name;private int age;public Student() {}protected Student(String name) {this.name = name;}protected Student(int age) {this.age = age;}public  Student(String name, int age) {this.name = name;this.age = age;}/*** 获取* @return name*/public String getName() {return name;}/*** 设置* @param name*/public void setName(String name) {this.name = name;}/*** 获取* @return age*/public int getAge() {return age;}/*** 设置* @param age*/public void setAge(int age) {this.age = age;}public String toString() {return "Student111{name = " + name + ", age = " + age + "}";}}
package MyReflect;import java.lang.reflect.Field;
import java.net.UnknownHostException;public class Test {public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, UnknownHostException, NoSuchFieldException, IllegalAccessException {//获取字节码文件Class clazz=Class.forName("MyReflect.Student");System.out.println("class:"+clazz);Field namefield=clazz.getDeclaredField("name");System.out.println(namefield);Student student=new Student("leo",11);// namefield.setAccessible(true);Object value=namefield.get(student);System.out.println("name:"+value);}}

4.利用反射获取成员方法

package MyReflect;import java.lang.reflect.Method;
import java.net.UnknownHostException;public class Test {public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, UnknownHostException, NoSuchFieldException, IllegalAccessException {//获取字节码文件Class clazz=Class.forName("MyReflect.Student");System.out.println("class:"+clazz);Method[] methods=clazz.getDeclaredMethods();for (Method method : methods) {System.out.println(method);}}}

package MyReflect;import java.lang.reflect.Method;
import java.net.UnknownHostException;public class Test {public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, UnknownHostException, NoSuchFieldException, IllegalAccessException {//获取字节码文件Class clazz=Class.forName("MyReflect.Student");System.out.println("class:"+clazz);Method[] methods=clazz.getMethods();for (Method method : methods) {System.out.println(method);}}}

package MyReflect;import java.lang.reflect.Method;
import java.net.UnknownHostException;public class Test {public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, UnknownHostException, NoSuchFieldException, IllegalAccessException {//获取字节码文件Class clazz=Class.forName("MyReflect.Student");System.out.println("class:"+clazz);Method method=clazz.getMethod("getName");System.out.println(method);}}

package MyReflect;import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.net.UnknownHostException;public class Test {public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, UnknownHostException, NoSuchFieldException, IllegalAccessException, InvocationTargetException {Student student = new Student("leo",11);//获取字节码文件Class clazz=Class.forName("MyReflect.Student");System.out.println("class:"+clazz);Method method=clazz.getDeclaredMethod("eat", String.class);System.out.println(method);method.invoke(student,"汉堡包");}}

 

package MyReflect;import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.net.UnknownHostException;public class Test {public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, UnknownHostException, NoSuchFieldException, IllegalAccessException, InvocationTargetException {Student student = new Student("leo",11);//获取字节码文件Class clazz=Class.forName("MyReflect.Student");System.out.println("class:"+clazz);Method method=clazz.getDeclaredMethod("eat", String.class);method.setAccessible(true);System.out.println(method);method.invoke(student,"汉堡包");}}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/53698.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL基础篇(黑马程序员2022-01-18)

1 MySQL数据库概述 1.1 MySQL数据库的下载,安装,启动停止 1.2 数据模型 (1)关系型数据库(RDBMS) 概念&#xff1a;建立在关系模型基础上&#xff0c;由多张相互连接的二维表组成的数据库。 特点&#xff1a; A. 使用表存储数据&#xff0c;格式统一&#xff0c;便于维护。…

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-25

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-25 1. PromSec: Prompt Optimization for Secure Generation of Functional Source Code with Large Language Models (LLMs) M Nazzal, I Khalil, A Khreishah, NH Phan - arXiv preprint arXiv:2409.12699, 2…

Python--操作列表

1.for循环 1.1 for循环的基本语法 for variable in iterable: # 执行循环体 # 这里可以是任何有效的Python代码块这里的variable是一个变量名&#xff0c;用于在每次循环迭代时临时存储iterable中的下一个元素。 iterable是一个可迭代对象&#xff0c;比如列表&#xff08;…

URI和URL的区别

1: 将 URI 转换为 URL import java.net.URI; import java.net.URL;public class UriToUrlExample {public static void main(String[] args) {// 创建一个 URI 对象URI uri = new URI("http://example.com/path/to/resource");// 将 URI 转换为 URLtry {URL url = u…

C语言中易混淆概念的关键字

最快的关键字---- register register&#xff1a; 这个关键字请求编译器尽可能的将变量存在 CPU 内部寄存器中而不是通过内 存寻址访问以提高效率。注意是尽可能&#xff0c;不是绝对。你想想&#xff0c;一个 CPU 的寄存器也就那么 几个或几十个&#xff0c;你要是定义了很多很…

变电站设备检测系统源码分享

变电站设备检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer V…

大模型如何赋能智慧城市新发展?

国家数据局近期发布的《数字中国发展报告&#xff08;2023&#xff09;》显示&#xff0c;我国数据要素市场化改革步伐进一步加快&#xff0c;数字经济规模持续壮大&#xff0c;数字技术应用场景不断拓展。这一成就的背后是数字技术广泛应用&#xff0c;数字技术不仅影响着老百…

移动硬盘突然打不开:深度剖析、恢复策略与预防措施

突发困境&#xff1a;移动硬盘的沉默拒绝 在日常的数字生活中&#xff0c;移动硬盘作为数据存储与传输的重要工具&#xff0c;扮演着不可或缺的角色。然而&#xff0c;当您急需访问存储在移动硬盘中的重要文件时&#xff0c;却遭遇了“突然打不开”的尴尬境地&#xff0c;这无…

软件无线电3-微相E316和HackRF实现FM调制解调

前面介绍了基于Matlab、矢量信号器和HackRF One实现射频下的FM调制解调&#xff0c;今天分享的内容是用微相E316替代矢量信号器完成发射工作。注意本文仅用于科研和学习&#xff0c;私自搭建电台属于违法行为。 1.概述 微相E316和HackRF One实现FM调制解调测试框图如1所示&am…

Excel 设置自动换行

背景 版本&#xff1a;office 专业版 11.0 表格内输入长信息&#xff0c;发现默认状态时未自动换行的&#xff0c;找了很久设置按钮&#xff0c;遂总结成经验帖。 操作 1&#xff09;选中需设置的单元格/区域/行/列。 2&#xff09;点击【开始】下【对齐方式】中的【自动换…

教授(优青)团队一站式指导:专业实验设计、数据分析、SCI论文辅助。基因表达分析、转录因子、组蛋白、染色质、DNA等高通量检测及基因功能分析

可高通量检测组蛋白不同修饰在基因组上的位点; 可用于模式物种和非模式物种的研究&#xff0c;无需特异性抗体; 完整的DAP-seq解决方案。 DAP-seq可高通量检测转录因子或DNA结合蛋白在基因组上的结合位点; 可用于模式物种和非模式物种的研究&#xff0c;无需特异性抗体; 完整的…

探索C语言与Linux编程:获取当前用户ID与进程ID

探索C语言与Linux编程:获取当前用户ID与进程ID 一、Linux系统概述与用户、进程概念二、C语言与系统调用三、获取当前用户ID四、获取当前进程ID五、综合应用:同时获取用户ID和进程ID六、深入理解与扩展七、结语在操作系统与编程语言的交汇点,Linux作为开源操作系统的典范,为…

计算机网络笔记002

### 课堂讨论对话 **学生A**: 老师&#xff0c;计算机网络的组成是怎样的&#xff1f;&#x1f914; **老师**: 非常好的问题&#xff01;计算机网络主要由硬件、软件和通信协议三部分组成。我们先从硬件开始讨论吧。 **学生B**: 硬件包括哪些设备呢&#xff1f;&#x1f60…

会员业务出口网关的设计与实现

01# 背景介绍 1.1 出口网关是什么 出口网关&#xff08;Egress Gateway&#xff09;是一种部署在云或企业网络中的网络组件&#xff0c;它控制着从内部网络&#xff08;如企业内网、内部微服务网络&#xff09;流出到外部网络&#xff08;如公共互联网或其他外部服务&#xf…

2024.9.25 数据分析学习

资料&#xff1a; 【开课吧哩堂】数据挖掘项目之用户流失预警系统_哔哩哔哩_bilibili 五万字 | Spark吐血整理&#xff0c;学习与面试收藏这篇就够了&#xff01;-腾讯云开发者社区-腾讯云 (tencent.com) 黑马程序员Spark全套视频教程&#xff0c;4天spark3.2快速入门到精通…

SQL进阶技巧:如何利用if语句简化where或join中的条件 | if条件语句的优雅使用方法

目录 0 问题场景 1 数据准备 2 问题分析 2.1 需求一 2.2需求二 3 小结 0 问题场景 有两张表,一张用户下单表user_purchase(用户ID粒度)包含用户ID、订单ID和下单消耗金额和一张用户维表user_info包含用户ID、用户年龄和用户是否实名认证。 user_purchase user_info 需…

网络编程,端口号,网络字节序,udp

前面一篇我们讲了网络的基础&#xff0c;网络协议栈是什么样的&#xff0c;数据如何流动传输的&#xff1b;接下来这篇&#xff0c;我们将进行实践操作&#xff0c;真正的让数据跨网络进行传输&#xff1b; 1.网络编程储备知识 1.1 初步认识网络编程 首先我们需要知道我们的…

用户态缓存:环形缓冲区(Ring Buffer)

目录 环形缓冲区&#xff08;Ring Buffer&#xff09;简介 为什么选择环形缓冲区&#xff1f; 代码解析 1. 头文件与类型定义 1.1 头文件保护符 1.2 包含必要的标准库 1.3 类型定义 2. 环形缓冲区结构体 2.1 结构体成员解释 3. 辅助宏与内联函数 3.1 min 宏 3.2 is…

OpenHarmony(鸿蒙南向)——平台驱动指南【MIPI CSI】

往期知识点记录&#xff1a; 鸿蒙&#xff08;HarmonyOS&#xff09;应用层开发&#xff08;北向&#xff09;知识点汇总 鸿蒙&#xff08;OpenHarmony&#xff09;南向开发保姆级知识点汇总~ 持续更新中…… 概述 功能简介 CSI&#xff08;Camera Serial Interface&#xf…

vue项目npm run serve 报错,Error: read ECONNRESET at TCP.onStreamRead

背景&#xff1a;vue2的项目&#xff0c;之前npm run serve一直可以正常使用&#xff0c;突然每次启动都会报错了&#xff0c;报错信息如下&#xff1a; node:events:492 throw er; // Unhandled error event ^ Error: read ECONNRESET at TCP.onStreamRead (n…