JavaEE企业开发新技术3

目录

2.11  Method的基本操作-1

文字性概念描述

代码:

2.12 Method的基本操作-2

2.13 Method的基本操作-3

2.14 数组的反射操作-1

文字性概念:

代码:

2.15 数组的反射操作-2


  • 学习内容

2.11  Method的基本操作-1

文字性概念描述

Method类

Method用来表示类中的方法。通过Class对象的如下方法得到Method对象

Method getMethod(String name, Class<?>... parameterTypes

按名称得到某个特定的public方法(包括从父类或接口继承的方法)

Method[] getMethods()

得到public方法(包括从父类或接口继承的方法)

Methodl getDeclaredMethods()

得到所有的方法(不包括继承的方法)

Method getDeclaredMethod(String name, Class<?>...parameterlypes)

按名称得到某个特定的方法(不包括继承的方法)

得到某个方法对应的Method对象后,需要调用如下方法来在某个对象上执行该方法:

(1)invoke(Object obj,Object ...obj)方法用来调用Method所表示的方法。其中,第一个参数表示此方法作用于哪一个对象。

注意:如果调用的是个静态方法,那么invoke0方法中第一个参数用null表示。

代码:
public abstract class Test3 {public static void main(String[] args) throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException {Person p1=new Person();Class clazz1=p1.getClass();System.out.println(clazz1==Person.class);Person p=(Person)clazz1.getConstructor(Integer.class,String.class,String.class,int.class,String.class).newInstance(100,"小明","男",1,"O型血");Method[] methods=clazz1.getMethods();for(Method m:methods) {System.out.println("共有的方法名称是:"+m.getName());}}
}

总结:拿到了所有共有的方法,包括从父类继承的方法

Person类中添加缺省的方法

void init() {

System.out.println("Person的init()方法");

}

测试类:

Method[] methods=clazz1.getDeclaredMethods();for(Method m:methods) {System.out.println("共有的方法名称是:"+m.getName());}

总结:运行结果中有init方法,没有拿到从父类继承的方法

Method method1=clazz1.getMethod("getName", null);

System.out.println("得到的方法是:"+method1.getName());

总结:getMethod得到的是指定的方法,第一个参数是得到方法的名称 ,第二个参数是方法带的参数的class类型

Person类加的私有的方法:

private void operation(String message) {

System.out.println(message);

}

Method method2=clazz1.getDeclaredMethod("operation", String.class);

System.out.println("得到的方法是:"+method2.getName());

2.12 Method的基本操作-2

Method method2=clazz1.getDeclaredMethod("operation", String.class);System.out.println("得到的方法是:"+method2.getName());//得到Method对象的最终目的还是为了去调用这个方法method2.setAccessible(true);//如果要执行一个私有的访问权限的方法,调用该方法之前要执行setAccessible方法,设置为truemethod2.invoke(p, "这是调用该方法时传递的实际参数");

//静态方法

public static void showMessage(String message) {

System.out.println(message);

}

Method method3=clazz1.getMethod("showMessage", String.class);System.out.println("得到的方法是:"+method3.getName());method3.invoke(null, "这是调用静态的showMessage方法");

总结:通过反射的方式调用静态方法,invoke()方法的第一个参数并不和某一个具体的对象所关联起来,所以第一个参数赋为null

2.13 Method的基本操作-3

public void showMessages(String[] strs) {

for(String s:strs) {

System.out.println(s);

}

}

Method method3=clazz1.getMethod("showMessages", String[].class);System.out.println("得到的方法是:"+method3.getName());String[] strs= {"你好","咸阳师范学院","计算机学院"};//调用数组参数的方法时,把整个实际的数组作为一个Object数组的唯一元素进行调用//method3.invoke(p,new Object[] {strs});//把实际数组下转成Object对象method3.invoke(p,(Object)strs);

Object obj=new String[] {"你好","咸阳师范学院","计算机学院"};

//数组也是复合数据类型

2.14 数组的反射操作-1

文字性概念:

在Java中数组属于复合数据类型,具有相同元素类型和维数的数组属于同一个类型,即具有相同的字节码对象。

代表数组的字节码对象调用getsuperClass()得到它的父类Object的字节码对象。

基本数据类型的一维数组可以当做Object类型使用,但不能当做Object[]类型使用;基本数据类型的二维数组可以当做Object[]类型使用;复合数据类型的一维数组既可以当做Object类型使用,也可以当做Object[]类型使用

java.lang.reflect.Array用于完成对数组的反射操作。

代码:
Object obj1=new int[3];//基本数据类型一维数组可以当作Object使用//Object[] obj2=new int[4];//基本数据类型一维数组不可以当作Object[]使用Object[] obj3=new int[4][5];//基本数据类型二维数组可以当作Object[]使用Object obj4=new String[4];//一维复合数据类型数组当作Object使用Object[] obj5=new String[4];//一维复合数据类型数组也可以当作Object[]使用Object[][] obj6=new String[4][5];//二维复合数据类型的数组可以当作			Object,Object[],或者Object[][]使用int a1[]=new int[6];int a2[]=new int[100];//只要维数像扽,类型相等,那么我们就数组的class对象相等(和元素个数无关)System.out.println(a1.getClass()==a2.getClass());

2.15 数组的反射操作-2

public void printArrayElements(Object obj) {Class clazz=obj.getClass();if(clazz.isArray()) {       //判断Class类型是否是数组int length=Array.getLength(obj);     //Array类可以对数组进行反射操作for(int i=0;i<length;i++) {//System.out.println(Array.get(obj, i));//在某个数组对象上获取下标为i的元素printArrayElements(Array.get(obj, i));   //递归调用}}else {System.out.println(obj);}}

测试类:

String[] strs= {"计算机科学与技术","软件工程","物联网工程"};int[][] a= {{1,2},{3,4}};String[][] str2= {{"计算机科学与技术","软件工程","物联网工程"},{"计算机科学与技术1","软件工程1","物联网工程1"}};p.printArrayElements(str2);

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

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

相关文章

python 深度学习 记录遇到的报错问题12

本篇继python 深度学习 记录遇到的报错问题11_undefined symbol: __nvjitlinkadddata_12_1, version-CSDN博客 目录 一、AttributeError: module ‘tensorflow‘ has no attribute ‘app‘ 二、AttributeError: module tensorflow has no attribute placeholder 三、Attribu…

Qt登录页面

#include "mywidget.h" #include "ui_mywidget.h"MyWidget::MyWidget(QWidget *parent): QWidget(parent), ui(new Ui::MyWidget) {ui->setupUi(this);//接收动图QMovie *mv new QMovie(":/pictrue/luori.gif");ui->loglab->setMovie(…

zabbix6.4监控mysql数据库

目录 一、前提二、配置mysql数据库模板三、配置监控的mysql主机 一、前提 已经搭建好zabbix-server 在需要监控的mysql服务器上安装zabbix-agent2 上述安装步骤参考我的上篇文章&#xff1a;通过docker容器安装zabbix6.4.12图文详解&#xff08;监控服务器docker容器&#xf…

《2024年中国企业CRM软件国产替代趋势研究报告》重磅首发

编者按 近日&#xff0c;Salesforce移动应用在中国大陆苹果应用商店的下架&#xff0c;预示着今年CRM国产化替代即将迎来高潮。CRM作为距离业务最近的软件&#xff0c;被公认为是企业数字化转型、高质量发展的核心系统之一。“企业如何选择一款真正满足自身业务需求的本土化CR…

线程安全的List之CopyOnWriteArrayList

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 ArrayList是线程不…

嵌入式C语言(十)

内建函数 这篇我们来看看什么是内建函数欸&#xff1f; 什么是内建函数 内建函数&#xff0c;顾名思义&#xff0c;就是编译器内部实现的函数。**这些函数和关键字一样&#xff0c;可以直接调用&#xff0c;**无须像标准库函数那样&#xff0c;要先声明后使用。 **内建函数…

ChatGPT是什么,怎么使用,需要注意些什么?

一、ChatGPT 是什么&#xff1f; ChatGPT&#xff0c;全称聊天生成预训练转换器&#xff08;Chat Generative Pre-trained Transformer&#xff09;&#xff0c;是 OpenAI 开发的人工智能(AI)聊天机器人程序&#xff0c;于2022年11月推出。该程序使用基于GPT-3.5、GPT-4架构的…

权限管理系统-0.6.0

七、员工端审批 员工端审批的大致流程如下图&#xff1a; 这个模块目的是实现员工在微信端的审批提交和处理功能&#xff0c;为了与之前的管理系统区分开&#xff0c;新建一个controller完成这些功能。 7.1 查询审批分类和审批模板 7.1.1 后端接口 //controller Api(tags …

elementUI Tree 树形控件单选实现

文章目录 展示效果代码实现elementui Tree树形控件其他详细数据 在Element UI中&#xff0c;树形控件&#xff08;el-tree&#xff09;本身不支持单选功能。但是&#xff0c;你可以通过监听节点点击事件并手动更新选中状态来实现单选树。 以下是一个简单的例子&#xff0c;展示…

【Spring 篇】SpringMVC拦截器:给你的应用增添色彩

嗨&#xff0c;亲爱的小伙伴们&#xff01;欢迎来到这段关于SpringMVC拦截器的奇妙之旅。今天我们要一探究竟&#xff0c;深入挖掘拦截器的神秘面纱&#xff0c;看看它是如何在你的应用中悄然发挥作用的。别怕&#xff0c;我会用最通俗易懂的语言&#xff0c;一步一步带你走进这…

【合合TextIn】深度解析智能文档处理技术与应用

目录 一、智能文档处理介绍 二、文档格式解析 三、图像增强技术解析 四、传统文字识别OCR技术解析 五、深度学习OCR技术解析 六、深度学习版面分析技术解析 七、文档分类 八、信息抽取 九、系统集成&#xff1a;将IDP处理后的数据集成到企业系统 结论 一、智能文档处…

下载 macOS 系统安装程序的方法

阅读信息&#xff1a; 版本&#xff1a;0.4.20231021 难度&#xff1a;1/10 到 4/10 阅读时间&#xff1a;5 分钟 适合操作系统&#xff1a;10.13, 10.14, 10.15, 11.x, 12.x&#xff0c;13.x, 14 更新2023-10-21 添加Mist的介绍支持版本的更新&#xff0c;13.x&#xff0…

Css提高——Css3的新增选择器

目录 1、Css3新增选择器列举 2、属性选择器 2.1、语法 2.2、代码&#xff1a; 2.3、效果图 3、结构伪类选择器 3.1、语法 3.2、代码 3.3、效果图 3.4、nth&#xff1a;child&#xff08;n&#xff09;的用法拓展 nth-child&#xff08;n&#xff09;与nth-of-type&#x…

MAC 帧(数据链路层)

目录 一、MAC帧的格式 二、无效的帧 三、帧间最小间隔 四、帧的发送与接收 五、小结 一、MAC帧的格式 • 常用的以太网 MAC 帧格式有两种标准 &#xff1a; DIX Ethernet V2 标准&#xff1b; IEEE 的 802.3 标准。 • 最常用的 MAC 帧是以太网 V2 的格式。 二、…

excel文件可以转成word文件吗?汇帮PDF转换器帮你实现excel转word

将Excel文件转换为Word文档是一个相对简单的任务&#xff0c;但在执行过程中需要注意一些细节&#xff0c;以确保转换后的文档格式正确、内容清晰。下面将详细介绍用汇帮PDF转换器将Excel转Word的步骤和注意事项。 一、Excel文件准备 在进行转换之前&#xff0c;首先确保Excel…

Linux部署MySQL

Linux部署MySQL5.7.17 mkdir /opt/mysql cd /opt/mysql#mysql下载官网&#xff1a; #https://downloads.mysql.com/archives/community/ #下载server、client、lib和common wget https://downloads.mysql.com/archives/get/p/23/file/mysql-community-server-5.7.17-1.el7.…

做抖店不知道怎么找达人?聊聊我是怎么找达人带货的,多看多做!

大家好&#xff0c;我是电商花花。 找不到合适的达人带货&#xff1f;不知道怎么找达人带货&#xff1f;多半都是没有用心去找达人带货&#xff0c;因为现在抖音上遍地都是达人&#xff0c;遍地都是达人在直播带货&#xff0c;在短视频带货。 而达人不是说不缺品&#xff0c;…

刚进公司第一天-电脑环境搭建

写在前面 之前在公司做过一次开发小工具的分享&#xff0c;这两天有个同事找我学习一些小工具开发的知识&#xff0c;但是我发现他的基础是真的差&#xff0c;想学开发知识却连自己本地电脑环境都没弄好&#xff0c;确实&#xff0c;有些人工作了很久&#xff0c;由于自己工作中…

了解Kafka位移自动提交的秘密:避免常见陷阱的方法

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 了解Kafka位移自动提交的秘密&#xff1a;避免常见陷阱的方法 前言位移自动提交简介自动提交的优缺点自动提交位移的优点&#xff1a;自动提交位移的缺点&#xff1a;自动提交与手动提交的对比分析&am…

【ScienceAI Weekly】「AI钢铁侠」黄仁勋在GTC大会聊英伟达布局科研;Overjet获牙科AI历史最大投资

AI for Science 的新成果、新动态、新视角—— 英伟达&#xff1a;有众多 AI for Scinece 领域的战略内容在布局 微软携手多家医疗机构推出 TRAIN Overjet 获牙科 AI 历史上最大的投资 联想控股与智谱 AI在生物科技等领域达成合作 Zephyr AI 获得 1.11 亿美元 A 轮融资 中…