运行期类型判定

上传人:无*** 文档编号:245228545 上传时间:2024-10-08 格式:PPT 页数:17 大小:342.47KB
返回 下载 相关 举报
运行期类型判定_第1页
第1页 / 共17页
运行期类型判定_第2页
第2页 / 共17页
运行期类型判定_第3页
第3页 / 共17页
点击查看更多>>
资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,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,Class对象,用来描述class的对象,程序中的每个class都有一个相应的Class对象。就是说你的新的class编译完成后,就会产生一个Class对象存储于相同的.class文件内。执行期间当你想要产生该class的对象时,JVM便会检查该类型的Class对象是否已经装载。如果尚未装载,JVM会根据名称找到.class文件并装载它。因此Java程序启动时并不会将整个程序都装载。,一旦某个型别的Class对象已经被装载,它就可以用来产生该型别的所有对象。,Tel:0571-88394222 QQ;106159278,Class封装对象运行时的状态。当类被加载创建对象时,与该类相关的一个类型为Class的对象就自动创建。Class类本身不提供构造方法,因此不能使用new运算符和构造方法显式地创建一个Class对象。任何对象调用getClass()方法都可以获取与该对象相关的一个Class对象,这个Class对象通过方法可以获取创建对象的类的有关消息(如类的名字、类中的方法名称、成员变量的名称等)。,Tel:0571-88394222 QQ;106159278,理解Class对象,Class是一个类,由该类生成的对象称为Class对象。(和其他的类道理一样)。,Class对象是一个对象,这个对象的功能是描述一个抽象的类,java里面的任何类都由一个Class对象来描述它。,Tel:0571-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与对象,Class是对类的描述,利用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 Computer(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();,Tel:0571-88394222 QQ;106159278,类型检查,传统类型。例如“shape”便是运行RTTI检查转型动作是否正确,并在转型错误时抛出ClassCastException,代表对象型别的所谓Class对象,我们可以查询Class对象获得有用的执行期信息。,关键字instanceof,Tel:0571-88394222 QQ;106159278,Instance of,转型之前最好执行类型检查:(避免执行期异常ClassCastException),1.传统转型:.instanceofif(x instanceof Dog)/这种运算符是使用老式关键字,他要求x必须为引用,所以不能用基本类型变量名,而后面的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)有对象的时候,可以用Object函数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,Tel:0571-88394222 QQ;106159278,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!