运行期类型判定ppt课件.ppt

上传人:本田雅阁 文档编号:2831512 上传时间:2019-05-24 格式:PPT 页数:17 大小:153.04KB
返回 下载 相关 举报
运行期类型判定ppt课件.ppt_第1页
第1页 / 共17页
运行期类型判定ppt课件.ppt_第2页
第2页 / 共17页
运行期类型判定ppt课件.ppt_第3页
第3页 / 共17页
运行期类型判定ppt课件.ppt_第4页
第4页 / 共17页
运行期类型判定ppt课件.ppt_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《运行期类型判定ppt课件.ppt》由会员分享,可在线阅读,更多相关《运行期类型判定ppt课件.ppt(17页珍藏版)》请在三一文库上搜索。

1、Tel:0571-88394222 QQ;106159278,运行时刻类型判定,Tel:0571-88394222 QQ;106159278,什么是“RTTI”,RTTI( run-time type identification )的初期想法非常简单:当有一个指向基础型别base type的reference时,RTTI机制让你找出其所指的确切型别,不过当拓展到java.lang.reflection的时候,展现了全新的功能. 即现在的java中存在两种形式的rtti: 传统的rtti; reflection机制 (反射机制),Tel:0571-88394222 QQ;106159278,C

2、lass对象,用来描述class的对象 程序中的每个class都有一个相应的Class对象。就是说你的新的class编译完成后,就会产生一个Class对象存储于相同的.class文件内。执行期间当你想要产生该class的对象时,JVM便会检查该类型的Class对象是否已经装载。如果尚未装载,JVM会根据名称找到.class文件并装载它。因此Java程序启动时并不会将整个程序都装载。 一旦某个型别的Class对象已经被装载,它就可以用来产生该型别的所有对象。,Tel:0571-88394222 QQ;106159278,Class封装对象运行时的状态。当类被加载创建对象时,与该类相关的一个类型为

3、Class的对象就自动创建。Class类本身不提供构造方法,因此不能使用new运算符和构造方法显式地创建一个Class对象。任何对象调用getClass()方法都可以获取与该对象相关的一个Class对象,这个Class对象通过方法可以获取创建对象的类的有关消息(如类的名字、类中的方法名称、成员变量的名称等)。,Tel:0571-88394222 QQ;106159278,理解Class对象,Class是一个类,由该类生成的对象称为Class对象。(和其他的类道理一样)。 Class对象是一个对象,这个对象的功能是描述一个抽象的类,java里面的任何类都由一个Class对象来描述它。,Tel:0

4、571-88394222 QQ;106159278,即使没有使用类创建对象,我们也可以实例化一个与该类相关的Class对象,可以直接让Class对象调用它的类方法: static Class forName(String className)。返回一个与参数className制定的类相关的Class对象。,Tel:0571-88394222 QQ;106159278,获得Class,ClassName.class New Object().getClass(); Class.forName(“path”);,Tel:0571-88394222 QQ;106159278,Class与对象,Cla

5、ss是对类的描述,利用Class也可以得到对象。 方法: new Object().getClass().newInstance(); 利用构造函数。,Tel:0571-88394222 QQ;106159278,构造函数,利用构造函数得到对象 Class c = Class.forName(“Computer”); Constructor constuctor = c.getConstructor(“.getClass();/ 获得参数为string类型的构造函数。 Object o = constuctor.newInstance(“); class Computer public Com

6、puter(String name) System.out.println(“带参数为String类型的构造函数”); ,Tel:0571-88394222 QQ;106159278,方法,利用Method类 c = Class.forName(name); o = c.newInstance(); com = (Computer_Class) o Method method = c.getMethod(“show“, String.class); Object re = method.invoke(com, “3“); System.out.println(re.toString();,Te

7、l:0571-88394222 QQ;106159278,类型检查,传统类型。例如“shape”便是运行RTTI检查转型动作是否正确,并在转型错误时抛出ClassCastException 代表对象型别的所谓Class对象,我们可以查询Class对象获得有用的执行期信息。 关键字instanceof,Tel:0571-88394222 QQ;106159278,Instance of,转型之前最好执行类型检查:(避免执行期异常ClassCastException) 1.传统转型:.instanceof if(x instanceof Dog) /这种运算符是使用老式关键字,他要求x必须为引用,

8、所以不能用基本类型变量名,而后面的Dog也必须是Class,所以还是不能用基本类型.同时有个缺点就是Dog本身必须是Class名,根本不能用某种变量替换,相比于下面的方法缺少灵活性. 2.操作Class对象: Class.isInstance(obj)/比如 Class c=Dog.class; if(c.isInstance(x)obj也要求是object,Tel:0571-88394222 QQ;106159278,RTTI methods,要运用RTTI,首先必须取得一个reference指向正确的类对象, 1) 使用字符串配合Class.forName() 2)有对象的时候,可以用Ob

9、ject函数getClass();,Tel:0571-88394222 QQ;106159278,注意,事实上。RTTI和多态上有重复的功能,先尝试使用多态,最后才使用RTTI,记住,不要滥用RTTI.,Tel:0571-88394222 QQ;106159278,练习,Fruit 类有属性表示个数。两个方法可以通过反射得到对象。实现这两个方法。 2. 获得对象方式: New 反射,Tel:0571-88394222 QQ;106159278,利用反射机制调用小孩的吃方法,吃方法需要传入一个参数,类型为数字。 通过字符串得到电脑,电脑只有一个构造函数,参数为字符串表示电脑牌子。利用反射调用电脑打印牌子的方法。,Tel:0571-88394222 QQ;106159278,联系方式,杭州和盈科技公司 Address:潮王路238号银地大厦2F ,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1