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

    第14章:类型信息(下)

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

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

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

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

  • 相关阅读:
    二叉树的遍历
    Balanced Binary Tree(平衡二叉树)
    Maximum Depth of Binary Tree(二叉树最大深度)
    Binary Tree Level Order Traversal(二叉树广度优先遍历或逐层遍历)
    解决mac下sublime中文乱码
    ubuntu下vi文本后出现不正常的情况
    Linux top命令的用法详细详解
    在Ubuntu 12.04下搭建Cocos2d-x 3.0 生成LuaBindings环境
    iOS7(Xcode5)中隐藏状态栏的方法
    VS2015 打包添加系统必备组件
  • 原文地址:https://www.cnblogs.com/aiwin/p/12444735.html
Copyright © 2011-2022 走看看