《Think in Java》(十四)类型信息】的更多相关文章

第十四章 类型信息 运行时类型信息使得你可以在程序运行时发现和使用类型信息 14.1 为什么需要RTTI 面向对象编程中基本的目的是:让代码只操作对基类的引用. 多态: import java.util.*; abstract class Shape { void draw() { System.out.println(this + ".draw()"); } abstract public String toString(); } class Circle extends Shape…
讲完.class,Class之后,继续. 1)泛化的Class引用 Class也能够增加泛型,增加之后会进行类型检查. 贴一下书上原话,Class<?>优于Class,尽管他们是等价的,Class<?>的优点是碰巧或疏忽使用了一个非详细的类引用.我搞不懂这个所谓非详细是什么? 后面弄懂了,事实上<?>作为通配符,就是未知的.直接写结论的话不能写个详细类型吧.作者的意思事实上就是说加了泛型的Class就是选择了非详细的版本号. 增加泛型的原因是提供编译期间的类型检查,操作…
1 Class对象 理解RTTI在Java中的工作原理,首先需要知道类型信息在运行时是如何表示的,这是由Class对象来完成的,它包含了与类有关的信息.Class对象就是用来创建所有“常规”对象的,Java使用Class对象来执行RTTI,即使你正在执行的是类似类型转换这样的操作.   每个类都会产生一个对应的Class对象,也就是保存在.class文件.所有类都是在对其第一次使用时,动态加载到JVM的,当程序创建一个对类的静态成员的引用时,就会加载这个类.Class对象仅在需要的时候才会加载,…
RTTI:Run-Time Type Information,关键词在 Run-Time,运行时的,而非编译期确定的关于类型的信息.运行时的类型信息(RunTime Type Information)使得可在程序运行时发现.识别和使用类型信息. Java 在运行时识别对象和类的信息,主要包括以下两种方式: "传统的"RTTI,假定我们在编译期即已知道所有的类型: "反射"机制,允许在运行时发现和使用类的信息: 1. RTTI 与类型转换 在 Java 中,所有的类型…
一.概念 编译时已知的到所有的类型:就是在写代码阶段就确定是这个类型了,当运行程序的时候,类型是不可改变的 举例:List<String> str = new ArrayList();  //运行时就无法改变其类型 运行时使用其他类型:就是运行程序的时候,可以根据代码改变其类型 Class c = Class.fromName(String className);//传入不同的className获取不同的对象 二.RTTI 定义: RTTI(Run-Time Type Identificati…
一.反射与RTTI RTTI:这个类型必须在编译的时候已知或者存在,如果不知道对象的确切类型,RTTI可以告诉你. 反射(个人认为就是能够利用Class获取或者调用.class这个文件中的数据):当我们从程序外(网络,磁盘中)在程序运行的时候获取这些数据,发现这些数据是个类,并且不知道该类的类型,那么我们怎么使用这些数据呢. 所以说根本区别是:RTTI在编译的时候会检查和打开.class文件,但是在反射中.class文件是不可获取的,所以在运行时打开和检查.class文件 二.使用 利用反射获取…
代理是基本的设计模式之一它为你提供额外的或不同的操作,而插入的用来代替"实际"对象的对象. package typeinfo; //: typeinfo/SimpleProxyDemo.java import static net.mindview.util.Print.*; interface Interface { void doSomething(); void somethingElse(String arg); } class RealObject implements In…
简介 RTTI,RunTime Type Information,运行时类型信息.Java 在运行时识别对象和类的信息主要有两种方式:一种是"传统的"RTTI,它假定我们在编译时已经知道了所有的类型:另一种是"反射"机制,它允许我们在运行时发现和使用类的信息. 涨姿势 这章学习了 instanceof 和反射以及动态代理等.…
1.RTTI:在运行时识别一个对象类型 JAVA在运行时 有时要 识别对象和类的信息这个机制叫RTTI.Java提供了两种机制去做这件事.传统的RTTI 和 反射. 传统的RTTI  假定编译时就已经知道了所有的类型. 反射   允许在运行时发现和使用类型信息 传统的RTTI 在编译期通过Class文件识别类型信息,反射在运行期通过Class文件识别类型信息. Java类型转换都发生在运行时期. 2.Class对象 Class对象是由Class这个类产生的,它包含了与某个类有关的信息. 每个类都…
fda dfa 第三题u package net.mindview.typeinfo.test4; import java.util.ArrayList; import java.util.Arrays; import java.util.List; abstract class Shape { void draw(){ /* * 重点在这里: * this指代的是实例对象,由于使用+连接字符串, 会自动调用对象的toString()方法. */ System.out.println(this…