Java 类型信息

标签: java 类型 信息 | 发表时间:2013-12-17 08:01 | 作者:love_world_
出处:http://blog.csdn.net

为什么需要运行时识别对象和类的信息?
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运行时系统始终为所有的对象维护一个被称为运行时的类型表示
这个信息保存着每个独享所属的类足迹
虚拟机利用运行时信息选择相应的方法(?类)执行


参考资料:
详解reflect Java的反射机制


java反射机制的实现原理

【原】Java反射机制的原理及在Android下的简单应用

Java学习之二-Java反射机制






作者:love_world_ 发表于2013-12-17 0:01:02 原文链接
阅读:200 评论:0 查看评论

相关 [java 类型 信息] 推荐:

Java 类型信息

- - CSDN博客移动开发推荐文章
*  为什么需要运行时识别对象和类的信息. 多态 - 实例都被向上转型为父类引用,实例调用相应方法时,需要知道当前父类型引用的具体类型,并从中查找相应方法. IDE - 获取任意类的所有字段和方法.  跨网络的远程平台上创建和运行对象的能力. 从磁盘文件,或者网络连接中获取一串字节(表示类). * 运行时识别对象和类的信息的两种方式:.

mysql java hibernate类型对应

- - 企业架构 - ITeye博客
类型名称 显示长度 数据库类型 JAVA类型 JDBC类型索引(int) 描述   . CHAR N CHAR java.lang.String 1  字符型  . BLOB L+N BLOB java.lang.byte[] -4  二进制型  . TEXT 65535 VARCHAR java.lang.String -1 text文本型  .

SQL 数据类型和 Java 数据类型间的映射关系

- - ITeye博客
由于 SQL 数据类型和 Java 数据类型是不同的,因此需要某种机制在使用 Java 类型的应用程序和使用 SQL 类型的数据库之间来读写数据. 为此,JDBC 提供了 getXXX 和 setXXX 方法集、方法 registerOutParameter 和类 Types. 本章汇集了影响各种类和接口的数据类型的有关信息,并列出所有的对应关系表(这些表显示了 SQL 类型和 Java 类型之间的映射关系)以便于参考.

Java根据文件头获取文件类型

- - BlogJava_首页
文件头是位于文件开头的一段承担一定任务的数据,一般都在开头的部分. 头文件作为一种包含功能函数、数据接口声明的载体文件,用于保存程序的声明(declaration),而定义文件用于保存程序的实现 (implementation).      为了解决在用户上传文件的时候在服务器端判断文件类型的问题,故用获取文件头的方式,直接读取文件的前几个字节,来判断上传文件是否符合格式.

Java中关于String类型的10个问题

- - ImportNew
简单来说,“==”是用来检测俩引用是不是指向内存中的同一个对象,而equals()方法则检测的是两个对象的值是否相等. 只要你项检测俩字符串是不是相等的,你就必须得用equals()方法. 如果你知道“字符串保留(string intern)”的概念那就更好了. 为什么安全敏感的字符串信息用char[]会比String对象更好.

java,根据头文件判断文件类型

- - Java - 编程语言 - ITeye博客
web判断文件的格式的时候,我们一般都是通过扩展名来判断,这个有点不太靠谱和安全. 下面是利用头文件来判断的代码:. * 根据文件流读取图片文件真实类型.  网上搜索了一些头文件的格式,但是强调一下,txt文件没有固定的头名,需要另外考虑,供参考:. JPEG (jpg),文件头:FFD8FF  .

Java垃圾回收机制与引用类型

- - 编程语言 - ITeye博客
Java语言的一个重要特性是引入了自动的内存管理机制,使得开发人员不用自己来管理应用中的内存. C/C++开发人员需要通过 malloc/ free和 new/ delete等函数来显式的分配和释放内存. 这对开发人员提出了比较高的要求,容易造成内存访问错误和内存泄露等问题. 一个常见的问题是会产生“悬挂引用(danglingreferences)”,即一个对象引用所指向的内存区块已经被错误的回收并重新分配给新的对象了,程序如果继续使用这个引用的话会造成不可预期的结果.

java GUI调用信息抽取工作Gate的方法

- - CSDN博客编程语言推荐文章
几个月前,尝试在JavaWeb项目中调用Gate API(关于Gate点 这里了解更多),在那里其安装配置很简单,根据官方手册很快可以搞定. 由于项目需求的变化,现在要把项目改为桌面版,所以又要考虑在Java GUI中调用 Gate API的问题. 根据官方手册完全行不通,各种报错,谷歌上可参考的内容也极少,我甚至还给开发人员发邮件询问,也没得到回复,相当吭爹,浪费老汉整整24小时的时间.

JAVA获取计算机CPU、硬盘、主板、网络等信息

- - 编程语言 - ITeye博客
l转[ http://www.cnblogs.com/jifeng/archive/2012/05/16/2503519.html]. 通过使用第三方开源jar包sigar.jar我们可以获得本地的信息. 1.下载sigar.jar. 2.按照主页上的说明解压包后将相应的文件copy到java路径.

HttpSevletRequest Body信息多次读取填坑录-java

- - 掘金后端
业务拦截器需要拦截request的所有传入信息. 通常情况下,HttpServletRequst 中的 body 内容只会读取一次,但是可能某些情境下可能会读取多次,由于 body 内容是以流的形式存在,所以第一次读取完成后,第二次就无法读取了,一个典型的场景就是 Filter 在校验完成 body 的内容后,业务方法就无法继续读取流了,导致解析报错.