《java编程思想》学习笔记——第十四章类型信息

     2022-03-15     790

关键词:

    运行时类型信息使得你可以在程序运行时发现和使用类型信息。

    主要有两种方式:一种是"传统的"RTTI, 它假定我们在编译时已经知道了所有的类型;另一种是"反射"机制,它允许我们在运行时发现和使用类的信息。

    

    Class对象

    类是程序的一部分,每个类都有一个Class对象。换言之,每当编写并且编译一个新类,就会产生一个Class对象(更恰当的说,是被保存在一个同名的.class文件中)。为了生成这个类的对象,运行这个程序的Java虚拟机(JVM)将使用被称为"类加载器"的子系统。

    所有的类都是在对其第一次使用时,动态加载到JVM中。当程序创建第一个对类的静态成员引用时,就会加载这个类。这个证明构造器也是类的静态方法,即使在构造器之前并没有使用static关键字。因此,使用new操作符创建类的新对象也会被当做对类的静态成员的引用。

    Java程序在它开始运行之前并非被完全加载,其各个部分是在必需时才加载的。

    类加载器首先检查这个类的Class对象是否已经加载。如果尚未加载,默认的类加载器就会根据类名查找.class文件。在这个类的字节码被加载时,它们会接受验证,以确保其没有被破坏,并且不包含不良Java代码

    一旦某个类的Class对象被载入内存,它就被用来创建这个类的所有对象。


    获取Class对象的方法:Class.forName("className"),object.getClass(),class.class;


    类字面常量

    如:Toy.class

    类字面常量不仅简单,而且更安全,因为它在编译时就会受到检查(因此不需要置于try语句块中)。并且它根除了对forName()方法的调用,所以也更高效。

    类字面常量不仅可以应用于普通的类,也可以应用于接口,数组以及基本数据类型。

    当使用".class"来创建对Class对象的引用时,不会自动地初始化该Class对象。为了使用类而做的准备工作实际包含三个步骤:

    1.加载,这个由类加载器执行的。该步骤将查找字节码(通常在classpath所指定的路径中查找,但这并非是必需的),并从这些字节码中创建一个Class对象。

    2.链接,在链接阶段将验证类中的字节码,为静态域分配存储空间,并且如果必需的话,将解析这个类创建的对其它类的所有引用。

    3.初始化,如果该类具有超类,则对其初始化,执行静态初始化器和静态初始化块。

    初始化被延迟到了对静态方法(构造器隐式地是静态的)或者非常数静态域进行首次引用时才执行。


    如果一个static final常量是"编译期常量",那么这个值不需要对类进行初始化就可以被读取。

    如果一个static域不是final的,那么在对它访问时,总是要求在它被读取之前,要先进行链接(为这个域分配存储空间)和初始化(初始化该存储空间)



    接口与类型信息

    interface关键字的一种重要目标就是允许程序员隔离构件,进而降低耦合性。如果你编写接口,那么就可以实现这一目标,但是通过类型信息,这种耦合性还是会传播出去——接口并非是对解耦的一种无懈可击的保障。

    动态代理

    使用反射可以查看类的任何东西。


本文出自 “小城运维” 博客,请务必保留此出处http://lixcto.blog.51cto.com/4834175/1911877

我的学习之路_第十四章_反射

类的反射【获取class文件对象的三种方式】:●使用Object类中的方法getClass() Class<?>getClass()返回此Object的运行时类.●使用类名.class属性 每一个数据类型,基本数据类型和引用数据类型,Java都会为其设置一个class属性 例如:Classclas... 查看详情

《java编程思想》学习笔记——第十五章泛型

    在面相对象编程中,多态算是一种泛化机制。    泛型实现了参数化类型的概念。    泛型的主要目的之一就是用来指定容器要持有什么类型的对象,而且由编译器来保证类型的正确... 查看详情

《java编程思想》学习笔记——第十六章数组

    数组和其它种类的容器之间的区别有三方面:效率,类型和保存基本类型的能力。在Java中,数组是一种效率最高的存储和随机访问对象引用序列的方式。数组就是一个简单的线性序列,这使得元素访问非常快... 查看详情

《opencl异构并行编程实战》补充笔记散点,第十二至十四章(代码片段)

?第十二章,在其他语言中使用OpenCL●JOCL(JavaBuildingforOpenCL),PyOpenCL●一个PyOpenCL的例子代码,需要pyopencl包1importpyopenclascl2importnumpyasnp3importnumpy.linalgasla45a=np.random.rand(50000).astype(np.float32)6b=np.random. 查看详情

cprimerplus读书笔记第十四章

这一章主要介绍C语言的结构和其他数据形式,是学习算法和数据结构的重点。 1.示例代码/*book.c--仅包含一本书的图书目录*/#include<stdio.h>#defineMAXTITL41#defineMAXAUTL31structbook{/*data*/chartitle[MAXTITL];charauthor[MAXAUTL];floatvalue;};intm 查看详情

算法导论读书笔记-第十四章-数据结构的扩张

算法导论第14章数据结构的扩张一些工程应用需要的只是标准数据结构,但也有许多其他的应用需要对现有数据结构进行少许的创新和改造,但是只在很少情况下需要创造出全新类型的数据结构,更经常的是通过存储额外信息的方法... 查看详情

第十四章网络编程

1.网络基础                           参考:http://www.cnblogs.com/Eva-J/ 查看详情

《java编程思想》学习笔记——第十二章通过异常处理错误

  Java的基本理念是"结构不佳的代码不能运行"    发现错误的理想时机是在编译阶段,也就是在你试图运行程序之前。然而,编译期间并不能找出所有的错误,余下的问题必须在运行期间解决。这就需要错误... 查看详情

2016710101072016-2017-2《java程序设计》第十四章学习心得

    通过这一章的学习,我知道了程序,进程和线程之间的关系,知道了Java实现多线程的两种途径:1.创建Thread类的子类;2.在程序中定义实现Runnable接口的类。线程的中断,线程的六种状态,多线程调度,守护线... 查看详情

《java编程思想》学习笔记——第四章控制执行流程

true和false    所有条件语句都利用条件表达式的真或假来决定执行路径。if-else    if(Boolean-expression)        statement  或    查看详情

onjava8第十四章流式编程

1流支持2流创建2.1随机数流2.2int类型的范围2.3generate()2.4iterate()2.5流的建造者模式2.6Arrays2.7正则表达式3中间操作3.1跟踪和调试3.2流元素排序3.3移除元素3.4应用函数到元素3.5在map()中组合流4Optional类4.1便利函数4.2创建-optional4.3optional-... 查看详情

cprimerplus(第六版)第十四章编程练习答案(代码片段)

这次打了真的好多天,不过坚持下来了,现在知道开发并不容易,不过值得学习。--10.16CH14 Codeanswer1:#include<stdio.h>#include<string.h>intDays(char*);structmonth charname[10]; charabbrve[4]; intdays; intmon 查看详情

《java编程思想》学习笔记——第十一章持有对象

    JAVA容器类类库的用途是"保存对象",并将其划分为两个不同的概念:    1)Collection。一个独立元素的序列,这些元素都服从一条或多条规则。List必须按照插入的顺序保存元素,而Set不能用重复元... 查看详情

《java编程思想》学习笔记——第十三章字符串

    String对象是不可变的。查看JDk文档你就会发现,String类每一个看起来会修改String值的方法,实际上都是创建了一个全新的String对象,以包含修改后的字符串内容。而最初的String对象则丝毫未动。+和StringBuilder&nbs... 查看详情

第十四章使用子查询

学习目的:了解是子查询以及如何使用它们。 子查询:查询(query)任何SQL语句都是查询。但此术语一般指SELECT语句。 SQL还允许创建子查询(subquery),即嵌套在其他查询中的查询。 利用子查询进行过滤:Q:检索出订... 查看详情

算法导论笔记——第十二~十四章数据结构树

第十二章二叉搜索树>=左子树的所有key,<=右子树的所有key在一棵高度为h的二叉搜索树上,动态集合上的操作SEARCH,MINIMUM,MAXIMUM,SUCCESSOR,PREDECESSOR,INSERT和DELETE可以在O(h)时间内完成。h>=(lgn向下取整)和快速排序算法一样,其... 查看详情

wpf学习第十四章事件路由(代码片段)

原文:【WPF学习】第十四章事件路由  由上一章可知,WPF中的许多控件都是内容控件,而内容控件可包含任何类型以及大量的嵌套内容。例如,可构建包含图形的按钮,创建混合了文本和图片内容的标签,或者为了实现滚动或... 查看详情

第十四章:类的带参方法

1.语法<访问修饰符>返回值类型<方法名>(<参数列表>){//方法的主体}<访问修饰符>:指该方法允许被访问的权限范围,只能是public、protected或private。其中public访问修饰符表示该方法可以被任何其他代码调用。返... 查看详情