




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、TelQQ;106159278,运行时刻类型判定,TelQQ;106159278,属性,构造方法,普通法,Class对象,Student对象,Student类信息,Student对象,TelQQ;106159278,什么是“RTTI,RTTI( run-time type identification )的初期想法非常简单:当有一个指向基础型别base type的reference时,RTTI机制让你找出其所指的确切型别,不过当拓展到java.lang.reflection的时候,展现了全新的功能. 即现
2、在的java中存在两种形式的rtti: 传统的rtti; reflection机制 (反射机制,TelQQ;106159278,Class对象,用来描述class的对象 程序中的每个class都有一个相应的Class对象。就是说你的新的class编译完成后,就会产生一个Class对象存储于相同的.class文件内。执行期间当你想要产生该class的对象时,JVM便会检查该类型的Class对象是否已经装载。如果尚未装载,JVM会根据名称找到.class文件并装载它。因此Java程序启动时并不会将整个程序都装载。 一旦某个型别的Class对象已经被装载,它就可以用来产
3、生该型别的所有对象,TelQQ;106159278,Class封装对象运行时的状态。当类被加载创建对象时,与该类相关的一个类型为Class的对象就自动创建。Class类本身不提供构造方法,因此不能使用new运算符和构造方法显式地创建一个Class对象。任何对象调用getClass()方法都可以获取与该对象相关的一个Class对象,这个Class对象通过方法可以获取创建对象的类的有关消息(如类的名字、类中的方法名称、成员变量的名称等,TelQQ;106159278,理解Class对象,Class是一个类,由该类生成的对象称为Class对
4、象。(和其他的类道理一样)。 Class对象是一个对象,这个对象的功能是描述一个抽象的类,java里面的任何类都由一个Class对象来描述它,TelQQ;106159278,即使没有使用类创建对象,我们也可以实例化一个与该类相关的Class对象,可以直接让Class对象调用它的类方法: static Class forName(String className)。返回一个与参数className制定的类相关的Class对象,TelQQ;106159278,获得Class,ClassName.class New Object().get
5、Class(); Class.forName(“path”,TelQQ;106159278,Class与对象,Class是对类的描述,利用Class也可以得到对象。 方法: new Object().getClass().newInstance(); 利用构造函数,TelQQ;106159278,构造函数,利用构造函数得到对象 Class c = Class.forName(“Computer”); Constructor constuctor = c.getConstructor(.getClass();/ 获得参数为string类
6、型的构造函数。 Object o = constuctor.newInstance(); class Computer public Computer(String name) System.out.println(“带参数为String类型的构造函数”);,TelQQ;106159278,方法,利用Method类 c = Class.forName(name); o = c.newInstance(); com = (Computer_Class) o Method method = c.getMethod(show, String.class); Object
7、 re = method.invoke(com, 3); System.out.println(re.toString(,TelQQ;106159278,类型检查,传统类型。例如“shape”便是运行RTTI检查转型动作是否正确,并在转型错误时抛出ClassCastException 代表对象型别的所谓Class对象,我们可以查询Class对象获得有用的执行期信息。 关键字instanceof,TelQQ;106159278,Instance of,转型之前最好执行类型检查:(避免执行期异常ClassCastException) 1.
8、传统转型:.instanceofif(x instanceof Dog) /这种运算符是使用老式关键字,他要求x必须为引用,所以不能用基本类型变量名,而后面的Dog也必须是Class,所以还是不能用基本类型.同时有个缺点就是Dog本身必须是Class名,根本不能用某种变量替换,相比于下面的方法缺少灵活性. 2.操作Class对象: Class.isInstance(obj)/比如 Class c=Dog.class; if(c.isInstance(x).obj也要求是object,TelQQ;106159278,RTTI methods,要运用RTTI,首先必须取得一个reference指向正确的类对象, 1) 使用字符串配合Class.forName() 2)有对象的时候,可以用Object函数getClass(,TelQQ;106159278,注意,事实上。RTTI和多态上有重复的功能,先尝试使用多态,最后才使用RTTI,记住,不要滥用RTTI,TelQQ;106159278,练习,Fruit 类有属性表示个数。两个方法可以通过反射得到对象。实现这两个方法。 2. 获得对象方式: New 反射,TelQQ;106159278,利用反射机制调用小
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 喷砂涂装管理办法
- 四电物资管理办法
- 团委内部管理办法
- 园区企业管理办法
- 围棋教育管理办法
- 国企廉政管理办法
- 国企销售管理办法
- 国外媒体管理办法
- 国旗国歌管理办法
- 团餐配送服务费协议
- 2025年丁烷气瓶市场前景分析
- 2025年北京市高考英语试卷(含答案)
- 计算机视觉与深度学习在交通工程中的应用
- 软件开发项目上线报告模板
- 医院重点病人管理制度
- 2025狱警公务员面试题及答案
- 非典型溶血尿毒综合征多学科共识解读(2025版)
- 中华护理学会团体标准|2024 针刺伤预防与处理
- STM32智能扫地机器人的设计与实现
- 国家电网有限公司输变电工程通 用设计(330~750kV输电线路绝缘子金具串通 用设计分册)2024版
- 湖北省武汉市经济开发区2025届四下数学期末考试试题含解析
评论
0/150
提交评论