您的位置:首页 > 编程语言 > Java开发

java编程思想_类型信息

2017-10-25 09:47 357 查看
*  为什么需要运行时识别对象和类的信息?

1. 多态 - 实例都被向上转型为父类引用,实例调用相应方法时,需要知道当前父类型引用的具体类型,并从中查找相应方法。

2. IDE - 获取任意类的所有字段和方法。

 跨网络的远程平台上创建和运行对象的能力

从磁盘文件,或者网络连接中获取一串字节(表示类)

对象序列化

* 运行时识别对象和类的信息的两种方式:

RTTI:  运行时类型识别, 在编译与运行时已知类型。

反射机制:运行期对模块无任何了解。

*  什么是RTTI?

在程序运行时保存其对象的型态信息的行为。

* RTTI的三种方法?

1. 强制类型转换

SuperClass  instance = (SuperClass) sub;

2. 利用Class对象

Class class = Class.forName("className");

Class class = objectInstance.getClass();

Class class = ObjectInstance.class 

3. ‹通过比较识别类型

if (sub instanceof SubClass) {}

if ( Class.isInstance() )

* Class常用方法

1. getName() 

 由于历史原因 

 Double[].class.getName()   返回"[Ljava.lang.Double;" 

 int[].class.getName()  返回"[" 

2. forName() 

     静态 :立即加载类型信息 

3. getClass() 

4. T.class 

     动态:不理解加载 类型信息 

     代表匹配的类对象 

          一个类对象表示一个“类型” 

     这个类型未必是类,例如int不是类,int.clss是一个Class类型的对象

5.Class<T> 

     限定Class引用必须是T类型 

     问题 

          Class<Number> genericNumberClass = int.class 

          Integer继承自Number 

          Integer.Class对象不是Number.Class对象的子类 

     解决以上问题 

          通配符" ? " 

          <? extends Number>

* 反射

* 什么是反射? 为什么要使用反射?

能够分析类能力的程序

java.lang.reflect 

这些类型的对象是由JVM在运行时创建的,可以表示未知类里对应的成员

类名作用
Class代表一个类。
Field代表类的成员变量(成员变量也称为类的属性)。?对象?
get() set()方法读取和修改与Field对象关联的字段
Method代表类的方法。 用invoke()方法调用与此类关联的方法
Constructor代表类的构造方法。
Array提供了动态创建数组,以及访问数组的元素的静态方法。
RTTI与反射的区别?

RTTI编译时类型必须已知。 .class文件 

Reflection编译时不知晓类型

* class 文件原理

Class类 

程序运行期间,Java运行时系统始终为所有的对象维护一个被称为运行时的类型表示 

这个信息保存着每个独享所属的类足迹 

虚拟机利用运行时信息选择相应的方法(?类)执行

JVM使用类加载器,在类第一次使用时动态加载到JVM中。

参考资料:

详解reflect Java的反射机制
http://developer.51cto.com/art/201104/252944.htm

java反射机制的实现原理
http://www.blogjava.net/qileilove/archive/2011/09/23/359350.html

【原】Java反射机制的原理及在Android下的简单应用
http://www.cnblogs.com/crazypebble/archive/2011/04/13/2014582.html

Java学习之二-Java反射机制
http://www.cnblogs.com/quincy/archive/2011/06/19/2084557.html

参考资料:

详解reflect Java的反射机制
http://developer.51cto.com/art/201104/252944.htm

java反射机制的实现原理
http://www.blogjava.net/qileilove/archive/2011/09/23/359350.html

【原】Java反射机制的原理及在Android下的简单应用
http://www.cnblogs.com/crazypebble/archive/2011/04/13/2014582.html

Java学习之二-Java反射机制
http://www.cnblogs.com/quincy/archive/2011/06/19/2084557.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: