反射方法 的简单使用

反射方法 的简单使用

获得字节码文件对象的三种方式

首先第一句,一切皆对象。类、属性、方法、构造器都是对象

该篇文章其实就注重两个点、是否有declared前缀,带有private的记得调用setAccessible
所涉及到的类:Class、Field、Construcotr、Method

  1. Object类的getClass方法

  2. 类型.class 属性

  3. Class.forName(“类的路径”)

都为true,内存地址是一样的。在程序的运行中,Person的class文件只被加载了一次。
注意:除了反射案例。在此赠送一套最新Java架构项目实战教程+大厂面试题库,想学的 点击此处免费获取,小白勿进哦

也为true,可知只加载了一次

也为true

用字节码文件对象来构建一个类的对象

字节码文件对象中包含:

那么 这4个字节码文件对象中叫什么呢?

java文件 字节码文件
字节码文件对象
构造方法 构造方法对象(类型Constructor)
成员变量 成员变量对象(类型Field)
成员方法 成员方法(类型Method)

之前一直用new的形式来创建一个类的对象

Person p = new Person()

加粗部分是类的构造方法,因为对象是通过构造方法创建的

用字节码文件中的构造器对象来创建一个类的对象——Constructor对象

获得Constructor来创建对象

注意:getDeclaredConstructor(Class<?>… parameterTypes)
这个方***返回指定参数类型的所有构造器,**包括public的和非public的,**当然也包括private的。
getDeclaredConstructors()的返回结果就没有参数类型的过滤了。

再来看getConstructor(Class<?>… parameterTypes)
这个方法返回的是上面那个方法返回结果的子集,只返回制定参数类型访问权限是public的构造器。
getConstructors()的返回结果同样也没有参数类型的过滤。

用反射有什么好处呢?之前Spring ioc有讲。可以通过配置文件动态创建对象:

来:

创建一个a.txt用来存储要创建对象的 全路径名称,之后读取这个字符串,用class.forName创建就可以了。以Person为例

获取名称后也可创建对象。

构造方法对象

四个访问修饰符:

getConstrustors是获取公有的,所以只有一个

getDeclaredConstructors这个就是得到所有的

获取指定的构造器

这是public的,如果不是public,使用getConstructor获得指定方法机会报NoSuchMethodException

所以也是用带Declared的getDeclaredConstructor

那么其他访问修饰符呢?

私有的可以得到构造器,但是不能创建对象

通过constructor.setAccessible(true)设置为可以访问

方法对象

它也有这些

其他方法是因为还有Object的,当然这是public的,要所有的需要加上Declared

先给Person加上getter与setter,以及该类的一个私有方法

可以发现有以下的区别

1.不带declared是得到所有的public修饰的method 包括从父类继承过来的Declared

2.带declared是得到当前类中的所有Method

注意,getMethod()是得到公有的方法,同样的也有getDeclaredMethod()

同样的,如果将getName()这个方法的访问权限改为私有的,那么也将报 **IllegalAccessException **

那么也是一样的,需要设置一下

得到属性对象

getField跟getDeclaredField,跟上面的一样的。因为这里是private

全部评论

相关推荐

06-27 12:54
已编辑
门头沟学院 Java
累了,讲讲我的大学经历吧,目前在家待业。我是一个二本院校软件工程专业。最开始选专业是觉得计算机感兴趣,所以选择了他。本人学习计算机是从大二暑假结束开始的,也就是大三开始。当时每天学习,我个人认为Java以及是我生活的一部分了,就这样持续学习了一年半,来到了大四上学期末,大概是在12月中旬,我终于找的到了一家上海中厂的实习,但我发现实习生的工作很枯燥,公司分配的活也不多,大多时间也是自己在自学。就这样我秋招末才找到实习。时间来到了3月中旬,公司说我可以转正,但是转正工资只有7000,不过很稳定,不加班,双休,因为要回学校参加答辩了,同时当时也是心高气傲,认为可以找到更好的,所以放弃了转正机会,回学校准备论文。准备论文期间就也没有投递简历。然后时间来到了5月中旬,这时春招基本也结束了,然后我开始投递简历,期间只是约到了几家下场面试。工资也只有6-7k,到现在我不知道该怎么办了。已经没有当初学习的心劲了,好累呀,但是又不知道该干什么去。在家就是打游戏,boss简历投一投。每天日重一次。26秋招都说是针对26届的人,25怎么办。我好绝望。要不要参加考公、考研、央国企这些的。有没有大佬可以帮帮我。为什么感觉别人找工作都是顺其自然的事情,我感觉自己每一步都在艰难追赶。八股文背了又忘背了又忘,我每次都花很长时间去理解他,可是现在感觉八股、项目都忘完了。真的已经没有力气再去学习了。图片是我的简历,有没有大哥可以指正一下,或者说我应该走哪条路,有点不想在找工作了。
码客明:太累了就休息一下兄弟,人生不会完蛋的
如果实习可以转正,你会不...
点赞 评论 收藏
分享
07-11 22:27
中南大学 Java
程序员牛肉:学历的话没问题。但是没问题的也就只有学历了。 其实你的整体架构是正确的,博客接着干。但是项目有点过于简单了。从后端的角度上讲,你这也就是刚入门的水平,所以肯定约面试够呛。 如果你要应聘后端岗位,那你第一个项目竟然是仿写操作系统。这个你要面试官咋问你。你一定要记住一点,你简历上写的所有的东西,都是为了证明你有能力胜任当前的岗位,而不是为了证明你自己会什么。 如果你只是浅浅的做几个项目,描述也都是烂大街。技术点也都是各种混水类的配置类需求,那你就不要幻想自己能走多远。一定要保持思考,保持学习。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务