反射的引出和概念
来源:互联网 发布:贴图软件 编辑:程序博客网 时间:2024/06/05 03:28
问题:
对象有编译类型和运行类型:
Object obj=new Date();
编译类型:Object
运行类型(其实就是obj对象真实的类型):Date
需求:根据对象obj调用Date类中的一个方法,如toLocalString,如何来做?
obj.toLocalString();//代码在编译阶段去编译类型Object中检查是否有该方法,如没有,编译失败;——这条语句会在编译阶段报错
解决办法:
1.强制类型转换 Date d=(Date)obj; obj.toLocalString();–正确
强制类型转换的前提:必须知道对象的真实类型,否则无法强制转换
如果不知道obj的真实类型,那又如何去调用toLocalString方法?
引出:
对象:又可称为数据
类:用来描述对象,或者描述数据,又称为描述数据的数据
java中,万物皆对象——从概念上讲,那么类也是一个对象,既然类是一种对象,那么谁又来描述该对象呢?而我们又说描述对象的都是类
元数据(meta data):描述数据(类)的描述数据
java中,所有类都是由元数据描述(Class类)
反射:得到元数据的行为
Date d1 =new Date();
Date d2 =new Date();
Date d3 =new Date();
String s1=”A”;
String s2=”B”;
String s3=”C”;
ArrayList a1=new ArrayList();
ArrayList a2=new ArrayList();
ArrayList a3=new ArrayList();
Class类、类、对象的关系如图所示。
既然Class类是对一切类的共同功能和行为的抽象,一个类中一般包含有:包、类名、父类、字段、方法、构造器等,Class类中就应该有这些属性
那么Class中应该有类具备的成员:
getPackage()–表示类的包
getSuperClass()–表示类的父类
getMethods()–表示类的方法
getField()–表示类的字段
…
Class类没有字段和显示构造器,但是具有方法,这些方法可以得到其所描述的数据的属性。
通过反射可以得到一个对象或者类所对应的Class类的实例对象,通过该实例调用Class类中的getMethods(),可以得到所映射的类的所有方法…
使用反射的前提:要确定所要反射的是哪一个对象,或反射的是哪个类。
注意:Class与Object的区别:
Object是一切对象的父类,所有类都继承至Object,其针对的是对象
Class针对的是类
反射定义:就是得到某个类中所有成员的机制
通过反射机制就可解决上面提出的问题!
获得Class实例的方式之一:——-详细介绍见《Class类和Class实例》这一篇博客`
对象.getClass();———-每个对象都有该方法,因此该方法定义在Object类中—-返回的是该对象的真实类型,即运行时类型
- 反射的引出和概念
- “暗物质”概念的引出
- 反射机制的原理和概念
- 浅析Java RTTI 和 反射的概念
- 由java ==和equals区别引出的对象以及对象的引用等相关概念。转载
- day16--泛类概念的引出以及使用的…
- 反射的概念
- 反射的概念
- Java反射的概念
- Java反射的概念
- 由一个性能问题引出的.net概念
- 由malloc内存分配是否连续 引出的 一些概念
- 大败局I,造名运动引出的概念经济。
- C#反射(Reflection)的概念和用法详解
- 映射和反射的概念及应用方法
- 生产者和消费者引出的多线程通信
- forward和redirect引出的路径问题
- linux下粘滞位引出的SUID和SGID
- 16 - 11 - 23 得分 - UVA 1585 --《算法竞赛入门经典》
- ”选择”的一点思考
- linux常用命令--find
- js 的时间的横竖屏事件
- iOS 开发 多线程详解之GCD基本概念
- 反射的引出和概念
- linux命令之 cut awk sed grep 篇
- Javascript DAY2
- activiti的流程实例的活动id
- LeetCode 417. Pacific Atlantic Water Flow 题解
- 64位win10下安装xgboost python包的教程
- 趣味程序 - 分数类与矩阵类的实现
- 推荐Python的编程网址
- NavigationView的使用