`
mtnt2008
  • 浏览: 362730 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Java语言基础:RTTI

阅读更多

Java语言基础:RTTI

此文于2011-03-29被推荐到CSDN首页
如何被推荐?

1.  每个类都有一个Class对象,当我们在运行期第一次生成类的实例时,JVM就加载这个类的Class对象,然后用这个Class对象来创建类实例;Class类似于Delphi中的引用类TClass,用于保存类的运行时信息。
 
2.  Class的static方法forName()用于查找某个类的Class对象,如果forName找不到你要的类的Class对象,会抛出ClassNotFoundException异常:
  1. class  A{  
  2. }  
  3.    
  4. public   class  Main {              
  5.     public   static   void  main(String[] args) {  
  6.         try  {  
  7.             Class<?> cls = Class.forName("A" );  
  8.             System.out.println(cls.getName());  
  9.         } catch  (ClassNotFoundException e) {  
  10.             e.printStackTrace();  
  11.         }  
  12.     }  
  13. }  
 
3.  查找类的Class对象的另一个方法是直接调用类.class,这会在编译期就检查是否正确,因此不需要捕获异常:
  1. class  A{  
  2. }  
  3.    
  4. public   class  Main {              
  5.     public   static   void  main(String[] args) {  
  6.         // 类有class关键字   
  7.         Class<A> acls = A.class ;  
  8.         System.out.println(acls.getName());  
  9.         // 普通类型也有   
  10.         Class<Integer> icls = int . class ;  
  11.         System.out.println(icls.getName());  
  12.     }  
  13. }  
 
4.  判断两个对象是否属于同一个类,可以通过比较他们的class的方式,通过对象的getClass()方法可以得Class对象:
  1. class  A{  
  2. }  
  3. class  B  extends  A {  
  4. }  
  5. public   class  Main {              
  6.     public   static   void  main(String[] args) {  
  7.         A a = new  B();  
  8.         B b = new  B();  
  9.         // a和b都B的实例,所以为true   
  10.         if  (a.getClass() == b.getClass())  
  11.             System.out.print("yes" );  
  12.         else   
  13.             System.out.print("no" );  
  14.     }  
  15. }  
 
5.  要判断对象是否继承或属于某个类,可以通过两个方法:1是使用instanceof关键字,2是使用Class.isInstance方法:
  1. class  A{  
  2. }  
  3. class  B  extends  A {  
  4. }  
  5. public   class  Main {              
  6.     public   static   void  main(String[] args) {  
  7.         A a = new  B();  
  8.         B b = new  B();  
  9.         // 使用instanceof关键字,a是否A或其子类的对象   
  10.         if  (a  instanceof  A)  
  11.             System.out.println("Yes" );  
  12.         // 使用instanceof关键字,b是否B或其子类的对象   
  13.         if  (b  instanceof  B)  
  14.             System.out.println("Yes" );  
  15.         // 使用isInstance方法   
  16.         if  (A. class .isInstance(a))  
  17.             System.out.println("Yes" );  
  18.         if  (B. class .isInstance(a))  
  19.             System.out.println("Yes" );  
  20.     }  
  21. }  
 
6.  Class.NewInstance可以创建一个类实例,该类必须有默认构造函数,否则会抛出InstantiationException异常:
  1. class  A{  
  2. }  
  3. public   class  Main {              
  4.     public   static   void  main(String[] args) {  
  5.         try  {  
  6.             A a = A.class .newInstance();  
  7.         } catch  (InstantiationException e) {  
  8.             e.printStackTrace();  
  9.         } catch  (IllegalAccessException e) {  
  10.             e.printStackTrace();  
  11.         }  
  12.     }  
  13. }  
 
7.  Class还提供了一些更强大的方法,可以得到类的更多信息,比如:getSuperclass: 取得父类的Class对象;getInterfaces: 取得实现的接口数组;还有其他很多方法,详见JavaDoc。

原文地址:http://blog.csdn.net/linzhengqun/archive/2011/03/28/6284929.aspx
分享到:
评论
1 楼 dotjar 2011-07-01  
Reflection?

相关推荐

    Java开发技术大全

    随后介绍了Java中的高级技术,详细讨论了其中的多线程、集合、泛型、RTTI等。这些基本知识介绍完毕之后,就进入到实际编程阶段,先后介绍了GUI程序设计、多媒体程序设计、数据库和网络程序设计,这些知识均以示例...

    java开发技术大全

    随后介绍了Java中的高级技术,详细讨论了其中的多线程、集合、泛型、RTTI等。这些基本知识介绍完毕之后,就进入到实际编程阶段,先后介绍了GUI程序设计、多媒体程序设计、数据库和网络程序设计,这些知识均以示例...

    java联想(中文)

    写在前面的话 ...D.3.2 依赖语言的方法 D.3.3 特殊情况 D.4 参考资源 D.4.1 性能工具 D.4.2 Web站点 D.4.3 文章 D.4.4 Java专业书籍 D.4.5 一般书籍 附录E 关于垃圾收集的一些话 附录F 推荐读物

    java 编程入门思考

    引言 1. 前提 2. Java的学习 ...D.3.2 依赖语言的方法 D.3.3 特殊情况 D.4 参考资源 D.4.1 性能工具 D.4.2 Web站点 D.4.3 文章 D.4.4 Java专业书籍 D.4.5 一般书籍 附录E 关于垃圾收集的一些话 附录F 推荐读物

    Java初学者入门教学

    1. 前提 2. Java的学习 3. 目标 4. 联机文档 5. 章节 6. 练习 ...D.3.2 依赖语言的方法 D.3.3 特殊情况 D.4 参考资源 D.4.1 性能工具 D.4.2 Web站点 D.4.3 文章 D.4.4 Java专业书籍 D.4.5 一般书籍

    JAVA_Thinking in Java

    引言 1. 前提 2. Java的学习 3. 目标 4. 联机文档 5. 章节 6. 练习 ...D.3.2 依赖语言的方法 D.3.3 特殊情况 D.4 参考资源 D.4.1 性能工具 D.4.2 Web站点 D.4.3 文章 D.4.4 Java专业书籍 D.4.5 一般书籍

    Thinking in Java简体中文(全)

    引言 1. 前提 2. Java的学习 ...D.3.2 依赖语言的方法 D.3.3 特殊情况 D.4 参考资源 D.4.1 性能工具 D.4.2 Web站点 D.4.3 文章 D.4.4 Java专业书籍 D.4.5 一般书籍 附录E 关于垃圾收集的一些话 附录F 推荐读物

    Thinking in Java 中文第四版+习题答案

    写在前面的话 引言 ...D.3.2 依赖语言的方法 D.3.3 特殊情况 D.4 参考资源 D.4.1 性能工具 D.4.2 Web站点 D.4.3 文章 D.4.4 Java专业书籍 D.4.5 一般书籍 附录E 关于垃圾收集的一些话 附录F 推荐读物

    JAVA_Thinking in Java(中文版 由yyc,spirit整理).chm

    JAVA_Thinking in Java(中文版 由yyc,spirit整理).chm ------------------------------------------------- 本教程由yyc,spirit整理 ------------------------------------------------- “Thinking in Java...

    超爽的自学课件(java)

    &lt;br&gt;(11) 第11章:运行期类型鉴定 若只有指向基础类的一个句柄,Java的运行期类型标鉴定(RTTI)使我们能获知一个对象的准确类型是什么。一般情况下,我们需要有意忽略一个对象的准确类型,让Java的动态绑定...

    Thinking in Java(中文版 由yyc,spirit整理).chm

    D.3.2 依赖语言的方法 D.3.3 特殊情况 D.4 参考资源 D.4.1 性能工具 D.4.2 Web站点 D.4.3 文章 D.4.4 Java专业书籍 D.4.5 一般书籍 附录E 关于垃圾收集的一些话 附录F 推荐读物 英文版主页 | 中文版主页 | 详细...

    Think in Java(中文版)chm格式

    引言 1. 前提 2. Java的学习 3. 目标 4. 联机文档 ...D.3.2 依赖语言的方法 D.3.3 特殊情况 D.4 参考资源 D.4.1 性能工具 D.4.2 Web站点 D.4.3 文章 D.4.4 Java专业书籍 D.4.5 一般书籍

    Java开发技术大全 电子版

    第2章Java语言基础19 2.1Java语言的特点19 2.2Java程序的构成21 2.3数据类 型23 2.3.1基本数据类型23 2.3.2常量25 2.3.3变量26 2.3.4整型数据27 .2.3.5浮点型数据29 2.3.6字符型数据30 2.3.7布尔型数据32 ...

    ThinkInJava

    . 前提 2. Java的学习 ...D.3.2 依赖语言的方法 D.3.3 特殊情况 D.4 参考资源 D.4.1 性能工具 D.4.2 Web站点 D.4.3 文章 D.4.4 Java专业书籍 D.4.5 一般书籍 附录E 关于垃圾收集的一些话 附录F 推荐读物

    thinkinjava

    引言 1. 前提 2. Java的学习 ...D.3.2 依赖语言的方法 D.3.3 特殊情况 D.4 参考资源 D.4.1 性能工具 D.4.2 Web站点 D.4.3 文章 D.4.4 Java专业书籍 D.4.5 一般书籍 附录E 关于垃圾收集的一些话 附录F 推荐读物

    编程新手真言......

    为什么我说Java是脚本语言 226 宽松语法,无语法语言 227 Linux与3D 228 伪码语言 229 最强大的语言原来是预处理 230 语言宿主 231 shell编程和交互式语句编程 232 Debug,编译期断言 232 图形原理之位图,图象和字体...

    C++大学教程,一本适合初学者的入门教材(part1)

    1.9 Java、Internet与万维网 1.10 其他高级语言 1.11 结构化编程 1.12 典型C++环境基础 1.13 C++与本书的一般说明 1.14 C++编程简介 1.15 简单程序:打印一行文本 1.16 简单程序:两个整数相加 1.17 内存的...

    C++大学教程,一本适合初学者的入门教材(part2)

    1.9 Java、Internet与万维网 1.10 其他高级语言 1.11 结构化编程 1.12 典型C++环境基础 1.13 C++与本书的一般说明 1.14 C++编程简介 1.15 简单程序:打印一行文本 1.16 简单程序:两个整数相加 1.17 内存的...

Global site tag (gtag.js) - Google Analytics