zoukankan      html  css  js  c++  java
  • 转行小白成长路-java篇

    第14章:类型信息(下)

      这里得纠正一下,昨天有个概念上的错误,就是RTTI和反射是两个概念,这两个本质上的区别是对于RTTI来说编译器编译时打开和检查.class文件,而反射在编译时是不可获取.class文件的。书中是这个意思将RTTI和反射机制分割开来,其实我有点想不通,起码逻辑上有点问题。不论RTTI还是反射在最初加载类的时候都是需要编译器检查类的,这第一步都要获取打开.class文件。就违反了这个分割的概念。但是他们有点不同,在于它们的侧重点不一样,RTTI侧重点在于获取类的信息,而反射的重点在于应用(获取方法,生成对象,处理问题)。所以我私自给他们定义的区别是目的不同,一个是为了获取类型信息,一个是为了解决问题。

      今天的重点在于应用,昨天我们分析了类加载的过程和一些引用的猜测,今天就是对他们的应用:

    • 注册工厂:注册工厂为了应对类型种类多,调用频率高的场景。书中的例子个人觉得还是挺有代表性的,注册工厂不仅有工厂更重要的是注册,生成一个大的容器包括众多类的对象,可以随意生成相应的对象。这种想法或者说这种实现方法和思想有没有可能是从object就开始呢,就是说我们说的堆栈和堆是不是都是一个大的容器。我们都是在两个大容器里来回调用信息。
    • 动态代理:这个动态和静态区别在于静态是将类直接嵌入到类中,动态则是通过中间的方法传参,参杂适配的思想。这些个专有名词可真是烦人,适配的意思通俗讲就是做个小马甲,只要同类谁穿上都可以。这个利用类型的什么信息了?大概是类型的包装。
    • 空对象:空对象最大的作用就是模拟对象和返回桩,这个桩的概念比较复杂。只是返回数据,它通常是重量级,并且经常在测试之间被复用。桩可以根据它们被调用的方式,通过配置进行修改,因此桩是一种复杂对象,他要做很多事。这个是书中的原话。模拟对象还是挺有道理的,桩的概念真的意识不到。以后慢慢理解把。
    • 等价性:instanceof/isInstance()保留了继承的相关概念,但是equals()和==并没有继承的概念,就是前两种导出类对象算是基类对象,但是后两种就不算,后两种只是比较地址。

      大致就这样。明天的泛型真恼火,那么多,大概会用三天把。

  • 相关阅读:
    606. Construct String from Binary Tree
    696. Count Binary Substrings
    POJ 3255 Roadblocks (次短路)
    POJ 2823 Sliding Window (单调队列)
    POJ 1704 Georgia and Bob (博弈)
    UVa 1663 Purifying Machine (二分匹配)
    UVa 10801 Lift Hopping (Dijkstra)
    POJ 3281 Dining (网络流之最大流)
    UVa 11100 The Trip, 2007 (题意+贪心)
    UVaLive 4254 Processor (二分+优先队列)
  • 原文地址:https://www.cnblogs.com/aiwin/p/12444735.html
Copyright © 2011-2022 走看看