同学们,上课了,小黄老师今天来教教大家什么是反射,男孩子必须学,女娃子也不用害羞好好学,学会了还可以教教咱班的男孩纸
![](https://img.haomeiwen.com/i27729824/62834f283dd84454.gif)
反射射射,首先万物皆对象,咳咳,单身的男同胞们,肯定知道类是用来描述对象的,那么内个类的类是什么呢?
![](https://img.haomeiwen.com/i27729824/bdc5990b84eef060.gif)
是Class,咳咳,老师这几天熬夜帮大家改作业的,嗓子不舒服,接下来,让班长小山来给大家念一下ppt
![](https://img.haomeiwen.com/i27729824/2e5b05c8f7d0c7f6.gif)
班长小山:大家看手机,ppt文件都发到群里了,自习。。。
![](https://img.haomeiwen.com/i27729824/c7899870a759c51d.gif)
1、什么是反射:
■ 问题1:
1、对象有编译类型和运行类型
Object obj = new java.util.Date();
- 编译类型:是声明时的类型,Object 类型
- 运行类型:是new 的类型,实例化类型 java.util.Date
□ 需求:通过obj对象,调用java.util.Date类中的toLocaleString方法。
直接 obj.toLocaleString(); 此时编译报错,编译时会检查编译类型中是否存在toLocaleString方法。
-
解决方案:因为咱知道obj的真实类型是java.util.Date类,可以进行类型的强制转化
java.util.Date d = (java.util.Date)obj; d.toLocaleString();//此时编译成功,成功调用方法
但是,若是不知道obj的真实类型,就不能强转(底层有一个方法-返回类型是Object类型的java.util.Date对象)
-
底层代码:
public static Object getObj(){
return new java.util.Date();
}
//使用反射:
Object obj = new java.util.Date();
Method m = obj.getClass().getMethod("toLocaleString");
m.invoke();
[图片上传失败...(image-49c0af-1645449465842)]
还有问题呀。。。。不好意思,人家问题有点多麻麻。。。
■ 问题2:
- 面向对象思维:万物皆对象,那么:类这种事物是什么对象呢?又需要用什么类来描述这种对象呢?
□ 当类一旦被加载进内存,就会变成Class对象【字节码对象】
类-用来描述对象,Class-用来描述类这种对象的类
- 好比是元数据:描述数据的描述数据。
------- 反射:就是得到类(这种对象的)类【java.lang.Class】,得到类的元数据的过程。
- 细致描述:在运行时期,动态地区获取某个类中的成员的信息(构造器、方法、字段、内部类、接口、父类等等)。
■ 还是根据万物皆对象的思维,我们把类中的每一种成员,都描述成一个新的类:
- Class:表示所有的类
- Constructor:表示所有的构造器
- Method:表示所有的方法
- Field:表示所有的字段
☀ 太棒了,终于将心里话说出来啦,反射就是---得到类的类
![](https://img.haomeiwen.com/i27729824/2a000f1d7aa9f57d.png)
写在后面的话
如果你觉得一乐的文章给您带来了一些收获,可以给个三连❤️ ,一乐会一如既往地更新有价值的博客。如果文章存在错误,也欢迎大家指出。还有,如果大家有什么好的学习技巧、学习感悟,也非常欢迎大家在评论区一起交流~
最后感谢大家的支持,谢谢~
网友评论