gpt4 book ai didi

java反射机制Reflection详解

转载 作者:qq735679552 更新时间:2022-09-28 22:32:09 28 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章java反射机制Reflection详解由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

java语言有好些个名词,让人望而生畏.

上智不教即知,下愚虽教无益,中庸之人,不教不知.

人的天性中就有一点对未知的恐惧.

刚开始不了解,也没认真看,发现好难呀;等,静下心来自己研究,再看其实不难,发现都是纸老虎,不堪一击.

今天就来分析一下反射:reflection  。

看一下维基百科的解释:

在诸如java之类的面向对象的程序设计语言中,反射允许在程序运行期间访问 类、接口、字段和方法,而不必在编译期间知道接口、字段或者方法的名称.

反射也允许实例化对象和调用方法.

总结三点:

第一:反射可以获取类、接口、字段和方法的信息.

第二:不止new可以创建对象,反射也可以实例化对象.

第三:通过反射实现对方法的调用.

对于创建对象或者调用方法:正常的步骤是先用new关键词,造一个对象,然后再使用此对象的引用去调用方法,这是正常的套路.

反射就是不按正常套路来,但是殊途同归,本来可以一步到位的东西,他要分几个详细的步骤或者绕个弯走。而他的先获取class类对象,再去创建对象仿佛就是分步走.

然后通过class类对象获取method,然后通过method的invoke方法调用对象的方法就是在绕个弯.

java反射机制Reflection详解

首先要创建一个reflection测试类 。

java反射机制Reflection详解

使用反射创建对象,用new创建对象就没必要再说了。javaapi为反射机制提供了一些类包括class和java.lang.reflect包下的类.

(1)第一种方式:使用class类的forname静态方法,可以获取一个类对象,然后调用类对象的newinstance方法创建对象.

(2)第二种方式:直接使用类名.class获取类对象,然后调用类对象的newinstance方法创建对象.

java反射机制Reflection详解

java反射机制Reflection详解

使用反射,获取类的public方法,并尝试调用类的方法.

(1)首先通过反射获取类对象,通过类对象的getmethods方法,获取类的所有public方法method[].

method是java.lang.reflect包下的类:提供某个 类、接口 的单一方法信息,提供对方法的访问。这个反射方法可以获取类方法或者实例方法.

循环输出方法名,可以看到,不止test1、3还有equals、hashcode等继承object的方法.

但是并没有test2,因为他不是public类型的方法.

java反射机制Reflection详解

java反射机制Reflection详解

(2)使用method的invoke调用方法test1和hashcode 。

java反射机制Reflection详解

java反射机制Reflection详解

(3)也可以使用getmethod获取method,不过要注意其参数 。

第一个参数:方法名 。

第二个参数:此方法参数的类型集合 。

java反射机制Reflection详解

java反射机制Reflection详解

使用反射,获取类的public字段,和获取方法类似,也有两个方法,一个是获取所有的public字段,另一个是获取某个public字段 。

java反射机制Reflection详解

java反射机制Reflection详解

使用反射,获取类和方法的注解。(retention(retentionpolicy.runtime),runtime类型的才能获取到) 。

(1)获取类的注解 。

java反射机制Reflection详解

java反射机制Reflection详解

(2)获取方法的注解 。

java反射机制Reflection详解

java反射机制Reflection详解

最后此篇关于java反射机制Reflection详解的文章就讲到这里了,如果你想了解更多关于java反射机制Reflection详解的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com