`

第14章类型信息

 
阅读更多
1.类是程序的一部分,每个类都有一个Class对象。该Class对象被保存在一个同名的.class文件中。
2.Class对象包含了与类有关的信息,Class对象用于创建类的所有“常规”对象。

3.jvm通过类加载器这个子系统来加载要用到的类。

4.所有的类都是在对其第一次使用时,动态加载到jvm中的。当程序创建第一个对类的静态成员的引用时,就会加载这个类。这个证明构造器也是静态方法。因为,通过new创建新对象时,也会被当做对类的静态成员的引用。

5.类加载器首先检查这个类的Class对象是否已经加载。如果尚未加载,默认的类加载器就会根据类名查找.class文件。一旦类的class对象被载入内存,它就用来创建这个类的所有对象。

6.static子句,是在类第一次被加载时执行。即,static初始化是在类加载时执行的。


7.java还提供了另一种方法来生成对class对象的引用,即类字面常量。例如
FancyToy.class
这个方法更安全、更高效、更简单,建议使用这种方式。它不仅适用于普通类,还适用于接口、数组和基本类型。基本类型的包装器,还有一个标准字段TYPE,指向对应基本类型的class对象。为了保持统一,建议还是使用.class吧


8.为了使用类而做的准备工作实际包含3个步骤:
(1).加载,通过类加载器寻找.class文件并加载;
(2).链接,为静态域分配存储空间;
(3).初始化,执行静态初始化器和静态初始化块;

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


9.仅使用.class语法来获取对类的引用不会引发初始化。但是,Class.forName()立即就进行了初始化。如果一个static final值是编译期常量,那么这个值不需要对该类进行初始化就可以读到,例如:

static final int staticFinal = 47;
如果只是static final而不是编译期常量,那么在读取的时候,就要进行初始化。例如:
static final int staticFinal2 = ClassInitialization.rand.nextInt(1000);

如果一个static域不是final的,那么在访问它时,总要进行链接(分配存储空间)和初始化(初始化该存储空间)。






附注:Class对象的一些主要方法用处
1.getInterfaces

public Class[] getInterfaces()

    Determines the interfaces implemented by the class or interface represented by this object.

    If this object represents a class, the return value is an array containing objects representing all interfaces implemented by the

class. The order of the interface objects in the array corresponds to the order of the interface names in the implements clause of the

declaration of the class represented by this object. For example, given the declaration:

         class Shimmer implements FloorWax, DessertTopping { ... }
        

    suppose the value of s is an instance of Shimmer; the value of the expression:

         s.getClass().getInterfaces()[0]
        

    is the Class object that represents interface FloorWax; and the value of:

         s.getClass().getInterfaces()[1]
        

    is the Class object that represents interface DessertTopping.

    If this object represents an interface, the array contains objects representing all interfaces extended by the interface. The order

of the interface objects in the array corresponds to the order of the interface names in the extends clause of the declaration of the

interface represented by this object.

    If this object represents a class or interface that implements no interfaces, the method returns an array of length 0.

    If this object represents a primitive type or void, the method returns an array of length 0.

    Returns:
        an array of interfaces implemented by this class.

2.getSuperclass

public Class<? super T> getSuperclass()

    Returns the Class representing the superclass of the entity (class, interface, primitive type or void) represented by this Class. If

this Class represents either the Object class, an interface, a primitive type, or void, then null is returned. If this object represents

an array class then the Class object representing the Object class is returned.

    Returns:
        the superclass of the class represented by this object.

3.newInstance  //创建所表示类的一个实例 ,当时所表示的类,必须有默认的构造函数

public T newInstance()
              throws InstantiationException,
                     IllegalAccessException

    Creates a new instance of the class represented by this Class object. The class is instantiated as if by a new expression with an

empty argument list. The class is initialized if it has not already been initialized.

    Note that this method propagates any exception thrown by the nullary constructor, including a checked exception. Use of this method

effectively bypasses the compile-time exception checking that would otherwise be performed by the compiler. The Constructor.newInstance

method avoids this problem by wrapping any exception thrown by the constructor in a (checked) InvocationTargetException.

    Returns:
        a newly allocated instance of the class represented by this object.
4.getCanonicalName

public String getCanonicalName()

    Returns the canonical name of the the underlying class as defined by the Java Language Specification. Returns null if the underlying

class does not have a canonical name (i.e., if it is a local or anonymous class or an array whose component type does not have a

canonical name).

    Returns:
        the canonical name of the underlying class if it exists, and null otherwise.
    Since:
        1.5

5.forName  //必须带上包名称,如果已经有一个类的对象了,可以通过getClass()方法来获取相应的class对象。

public static Class<?> forName(String className)
                        throws ClassNotFoundException

    Returns the Class object associated with the class or interface with the given string name.
Parameters:
    className - the fully qualified name of the desired class.
Returns:
    the Class object for the class with the specified name.


分享到:
评论

相关推荐

    第十四章 类型信息

    在"chapter14"这个压缩包文件中,可能包含了关于如何获取和利用类型信息的具体示例,涵盖上述各种情况。学习这部分内容,开发者可以提升对程序内部运作的理解,编写更健壮、更易于维护的代码,并且能够更有效地利用...

    Java编程思想第十四章类型信息之反射与代理.pptx

    Java编程思想第十四章类型信息之反射与代理.pptx

    c语言课件(第一章 C语言基础、第二章 变量和数据类型、第三章 运算符...第十二章 结构)

    第四章至第八章可能包含了关于控制结构、输入/输出、数组、指针等内容。控制结构包括条件语句(if-else)和循环(for、while、do-while),用于控制程序的执行流程。输入/输出函数如scanf和printf则用于与用户交互。...

    C#语言和SQL Server数据库基础-第14章上机练习.zip

    在本资源"C#语言和SQL Server数据库基础-第14章上机练习.zip"中,主要探讨了C#编程语言与SQL Server数据库的基础知识及其实际应用。这是一份由原创作者田超凡编写的教程,旨在帮助学习者通过上机实践来加深对这两个...

    C语言第一章概述

    第四章:选择结构程序设计 4课时 第五章:循环结构程序设计 8课时 第六章:函数与编译预处理 4课时 第七章:数组 6课时 第八章:指针 8课时 第九章:结构体数据类型与链表 6课时 第十章...

    UNIX环境高级编程(第十四章)

    【UNIX环境高级编程(第十四章)】章节主要讲解了UNIX系统中进程间通信(IPC,InterProcess Communication)的各种机制,这些机制允许不同进程之间高效地交换信息,超越了简单的文件共享和进程创建。以下是对各知识...

    MySQL 5.7从入门到精通 第5章 数据类型和运算符 共17页.pptx

    第14章 数据备份与还原 共21页.pptx 第15章 MySQL日志 共22页.pptx 第16章 性能优化 共18页.pptx 第17章 MySQL Workbench5.2 的使用 共15页.pptx 第18章 MySQL Replication 共27页.pptx 第19章 MySQL Cluster 共49页...

    ACCP6.0 S1 C#语言 和 数据库技术基础 第14章(共17章)

    【标题】"ACCP6.0 S1 C#语言 和 数据库技术基础 第14章(共17章)"涵盖了计算机科学中的两个关键领域,即C#编程语言和数据库技术,这些都是现代软件开发的基础。在这一部分,我们将会深入探讨C#语言的基本语法和特性...

    北大青鸟 ACCP 之 asp.net 8 - 14 章

    **第十四章:ASP.NET MVC** ASP.NET MVC是一种模型-视图-控制器架构模式,为Web开发提供了更灵活的方式。会讲解MVC架构的原理,以及如何创建和路由控制器、视图和模型。 通过北大青鸟ACCP的这些章节,学生将全面...

    Java编程思想笔记(全)

    第十四章探讨了Java中的反射机制。反射允许程序在运行时获取类的信息并操纵对象的状态。本章讲解了Class对象的使用方法、如何获取类的方法和字段信息、如何动态创建对象以及调用方法等内容。通过反射,可以实现更为...

    机械课后习题答案第14章习题及解答.pdf

    描述中并未提供具体信息,但我们可以推测这可能是一个学习资源,提供了解答机械工程课程中第14章习题的答案,帮助学生理解和掌握相关知识。 标签“资料”暗示这是一个学习资料或参考资料,可能包含详细的解释和计算...

    VC开发经验技巧 共分为21章 第十四章

    【标题】"VC开发经验技巧 共分为21章 第十四章" 提供了关键信息,这是一份关于Visual C++(简称VC)开发的综合教程,共有21个章节,而我们关注的是第14章。在VC开发中,开发者通常会涉及到Windows应用程序设计、MFC...

    编程思想下篇

    由于上传文件大小限制该资源为上下篇 本资源为下篇 ...第14章 类型信息 第15章 泛型 第16章 数组 第17章 容器深入研究 第18章 Java I/O系统 第19章 枚举类型 第20章 注解 第21章 并发 第22章 图形化用户界面

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

    5.8 数组初始化 5.8.1 可变参数列表 5.9 枚举类型 5.10 总结 第6章 访问权限控制 第7章 复用类 第8章 多态 第9章 接口 第10章 内部类 第11章 持有对象 第12章 通过异常处理错误 第13章 字符串 第14章 类型信息 第15...

    MySQL 5.7从入门到精通 第14章 数据备份与还原 共21页.pptx

    第14章 数据备份与还原 共21页.pptx 第15章 MySQL日志 共22页.pptx 第16章 性能优化 共18页.pptx 第17章 MySQL Workbench5.2 的使用 共15页.pptx 第18章 MySQL Replication 共27页.pptx 第19章 MySQL Cluster 共49页...

    第十四章 Caché 定义和使用关系

    文章目录第十四章 Caché 定义和使用关系关系概述一对多关系主子关系主子关系和储存共同关系术语定义关系一般语法定义一对多关系定义父子关系父子关系和编辑。示例一对多关系示例主子关系示例连接对象方案1:更新一...

    C++Primer 第四版课后习题解答(第1~18章完整答案)完整版

    第四章“数组和指针”深入讨论了数组的特性和指针的使用。习题解答会涵盖多维数组、指针运算、指针与数组的关系,以及动态内存分配和释放。 第五章“表达式”讲解了C++中的算术、比较和逻辑表达式,还包括自增自减...

    ACCPS1 14章项目

    【描述】在“ACCPS1 14章项目”中,学生将面临一系列编程挑战,这些挑战通常涵盖Java 5的更新内容,包括但不限于自动装箱与拆箱、枚举类型、可变参数、匿名内部类、泛型以及增强的for循环(foreach)。通过实际操作...

    c语言程序设计王勇第14章结构体共用体和用户定义类型-海贝.ppt

    在第14章“结构体与共用体和用户定义类型”中,王勇老师详细讲解了这一概念。`typedef` 关键字用于给已有的数据类型赋予新的名字,例如: ```c typedef int INTEGER; typedef float REAL; ``` 在这两个例子中,`...

    Python中文指南,共十三章

    Python中文指南,共十三章,分别为第一章:安装运行、第二章:数据类型、第三章:数据结构、第四章:控制流程、第五章:学习函数、第六章:错误异常、第七章:类与对象、第八章:包与模块、第九章:调试技巧、第十章...

Global site tag (gtag.js) - Google Analytics