`
laststand
  • 浏览: 10371 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

Thinking in Java 学习笔记——类型信息

阅读更多

因为毕业季,很多烦心的事,间断这么久都没有更新。本周学习进入类型信息、泛型、数组的学习。继续学习笔记。不再按照之前的编号,分章节贴出。


 

————————————————————————分割线———————————————————————————

 

RTTI(Run-Time Type Identification)可以在运行时获得一个对象的信息(这样机制的产生原因,应该在于java的对象存储都是Oject,是伪多态,类型识别需要额外的信息 Java中,对于类型的确保:在编译时通过泛型系统来确保,在运行时通过类型转换来确保。对于具体的调用,则是通过多态的处理。对于List<Shape>这样的list,当向上转型之后,CircleSquare的类型信息会丢失,那么还是不是可以通过RTTI在运行时得到?

 

       类与对象,类就是类,但是也是对象,为了让jvm使用,每个类都会拥有一个特殊的对象:Class对象,准确的说,是编译出一个与类同名的class文件。

       Class.forName(String s)这个方法就是class这个对象类(所有class的对象都属于这个类)的static变量,方法的作用为按照传入的String寻找对应的class文件,加载(如果还没有),然后返回这个class对象引用(如类加载器),然后可以进行操作。

       Class类型引用的获取除了使用forName方法,如果已经有了一个现成的对象,调用getClass()也可以得到class引用,从而得到运行时的类型信息,这个是一个Object的方法。获得引用后,可以使用getNamegetSuperClassnewInstance(这个方法涉及到反射,不然在创建Object后没有类型转化)这样的方法。

       class的获取还有A.class这样的获取引用的方法,与forName之类的差别就是,这种引用的获取并不会触发类的加载(链接、static初始化等),直至使用才进行(惰性加载)。复习:对于static final这样的编译器常量的引用,并不会触发加载。

       对于泛型,最为主要的一点作用就是编译时确保类型安全。通过使用泛型语法,可以让编译器强制执行额外的类型检查。对于Class<?>Class,他们虽是等价的,但是前者却更优,因为它代表了你做了一个非具体的版本,而非什么都没有选。泛型不会对超类或者子类有任何的松懈。

       RTTI确保类型转换,另外可以提供Class对像的运行时信息查询,最后还提供了instanceof的查询(通常在使用cast之前检查)C++中并不使用RTTI,对于运行时的新的类型(多态),只是将其作为新的类型对待。

       对于类型转换而言,直接使用(BA这样转换与使用A.castB),后一种会执行更多的额外操作。

       Instanceof 与 isinstance()完全等价,它指的是“你是这个类吗,或者你是这个类的子类?”直接的对class对象的比较就是确切的类型,无关继承。

       在运行时,不知道一个对象的类型,可以通过RTTI获知,但是有一个前提,这个类型在编译时必须已知,这样才能通过RTTI识别。就是说,如果在运行时获得了一个编译时期没有获知的类型的对象,无法通过RTTI获知类型。如在运行时在网络上截取一段字节码,怎么知道它是那个类型?答案在在于反射。(IDE的实现,如语法提示,是通过什么呢?如eclipse,是不是通过class?反射?

 

       反射一般使用的不多,用于创建更为动态的代码。


 

分享到:
评论

相关推荐

    Thinking in Java 自学笔记——第一章 对象导论

    Thinking in Java 自学笔记——第一章 对象导论 本章节总结了面向对象程序设计(Object-oriented Programming, OOP)的基本概念和原则,以帮助读者更好地理解 Java 编程语言。以下是对标题、描述、标签和部分内容的...

    Thinking in Java 自学笔记——第二章 一切皆对象

    ### Thinking in Java 自学笔记——第二章 一切皆对象 #### 重要概念解析 ##### 2.1 用引用操纵对象 在Java中,一切都被视为对象,这意味着无论是字符串、数字还是其他数据类型都可以被视为对象来进行操作。当...

    Thinking in java学习笔记

    《Thinking in Java》是一本深度解析Java编程语言的经典著作,其深入浅出的讲解和丰富的实例使得读者能够全面理解Java的精髓。以下是对书中部分关键知识点的总结: 1. **Java 泛型**:泛型是Java SE 5.0引入的重要...

    Thinking in Java读书笔记

    ### Thinking in Java 读书笔记知识点总结 #### 一、万事万物皆对象 1. **对象存储位置** - **寄存器**:程序无法直接控制。 - **栈(Stack)**:存储基本类型数据和对象引用,但对象本身不在此处。 - **堆(Heap)...

    王者归来之Thinking in java读书笔记

    《王者归来之Thinking in Java读书笔记》是对Bruce Eckel的经典之作《Thinking in Java》第四版的深度学习与总结。这本书是Java程序员的必备参考书,它深入浅出地阐述了Java语言的核心概念和技术,旨在帮助读者理解...

    Thinking in java .txt

    除了泛型的基本用法之外,《Thinking in Java》还探讨了更高级的主题,如反射机制,这是一种能够获取类的信息并动态创建对象的技术,在某些场景下非常有用。 ### 四、案例分析与实践 #### 1. 实战案例 书中包含多...

    Thinking in Java 4th Edition Annotated Solutions Guide

    根据提供的文件信息,以下是对文件《Thinking in Java 4th Edition Annotated Solutions Guide》中所包含知识点的详细解释: 首先,文件标题《Thinking in Java 4th Edition Annotated Solutions Guide》指出了这是...

    Thinking In java学习笔记

    ### Thinking In Java 学习笔记知识点总结 #### 面向对象编程(OOP)的重要性及其影响 面向对象编程(OOP)在软件开发领域产生了深远的影响。它不仅提高了开发效率和降低了维护成本,还简化了设计流程,使得编程任务...

    Thinking in java4(中文高清版)-java的'圣经'

    类型信息 第15章 泛型 第16章 数组 第17章 容器深入研究 第18章 Java I/O系统 第19章 枚举类型 第20章 注解 第21章 并发 第22章 图形化用户界面 附录A 补充材料 可下载的补充材料 Thinking in C:Java的基础 Java...

    Thinking in java学习资料

    Thinking in java第三版中文版,第四版英文版以及对应的习题答案! 博文链接:https://easonfans.iteye.com/blog/456901

    Thinking in Java 4 源码 导入IDEA可直接运行

    《Thinking in Java》是Bruce Eckel的经典之作,第四版(TIJ4)更是Java程序员必读的书籍之一。这本书深入浅出地介绍了Java语言的核心概念和技术,包括面向对象编程、集合框架、多线程、网络编程等众多主题。源码是...

    Thinking in Java 练习题答案

    《Thinking in Java》是Bruce Eckel的经典之作,它深入浅出地介绍了Java语言的核心概念和技术。这本书的练习题是学习Java的重要组成部分,因为它们能够帮助读者巩固理论知识并提升实践能力。以下是对"Thinking in ...

    Thinking in Java 4th Edition + Annotated Solution Guide (代码)英文文字版 带书签 有答案

    《Thinking in Java》是Bruce Eckel的经典之作,第四版涵盖了Java编程语言的广泛主题,适合初学者和有经验的程序员。这本书深入浅出地讲解了Java的核心概念和技术,旨在帮助读者建立坚实的编程基础,并理解面向对象...

    《thinking in java》第三版完整PDF书籍+习题答案(中文版)

    《Thinking in Java》是Bruce Eckel的经典之作,被誉为学习Java编程的权威指南。该书以其深入浅出的方式,详尽地介绍了Java语言的核心概念和技术。第三版是此书的一个重要里程碑,它涵盖了Java语言的诸多关键特性,...

    Thinkingin Java电子书

    《Thinking in Java》是一本备受推崇的Java编程教材,由Bruce Eckel撰写,被誉为Java学习者的必读之作。这本书深入浅出地介绍了Java语言的核心概念和技术,覆盖了从基础到高级的主题,对于有一定Java基础的读者来说...

    Thinking in Java——自己手写的代码

    "Thinking in Java——自己手写的代码"这个压缩包很可能是作者在阅读这本书的过程中,为了加深理解和实践,自己编写的代码实现。 在压缩包"Think in Java 4 code"中,我们可以预期找到与《Thinking in Java》第四版...

    Thinking in Java 习题答案

    《Thinking in Java》是Bruce Eckel的经典编程教材,它深入浅出地介绍了Java语言的核心概念和技术。...《Thinking in Java-answer》提供的答案集将帮助读者检查自己的理解,找到错误并修正,从而更有效地学习Java编程。

    Thinking in java 电子书

    《Thinking in Java》是 Bruce Eckel 编著的一本经典的Java编程教材,它深受程序员喜爱,被誉为学习Java的必备参考书。这本书全面深入地探讨了Java语言的核心概念和技术,不仅适合初学者,也对有经验的程序员提供了...

    thinking in java 第四版 源码

    《Thinking in Java》是Bruce Eckel的经典之作,第四版更是被广大Java开发者视为学习和进阶的重要参考书籍。这本书深入浅出地介绍了Java语言的核心概念和技术,包括面向对象编程、集合框架、多线程、网络编程、GUI...

Global site tag (gtag.js) - Google Analytics