gpt4 book ai didi

Java进阶教程之运行时类型识别RTTI机制

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 26 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章Java进阶教程之运行时类型识别RTTI机制由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

运行时类型识别(RTTI, Run-Time Type Identification)是Java中非常有用的机制,在Java运行时,RTTI维护类的相关信息.

多态(polymorphism)是基于RTTI实现的。RTTI的功能主要是由Class类实现的.

Class类 。

Class类是"类的类"(class of classes)。如果说类是对象的抽象和集合的话,那么Class类就是对类的抽象和集合.

每一个Class类的对象代表一个其他的类。比如下面的程序中,Class类的对象c1代表了Human类,c2代表了Woman类.

  。

复制代码代码如下:

public class Test {     public static void main(String[] args)     {         Human aPerson = new Human();         Class c1      = aPerson.getClass();         System.out.println(c1.getName()),

  。

        Human anotherPerson = new Woman();         Class c2      = anotherPerson.getClass();         System.out.println(c2.getName());       } } 。

class Human {         /**      * accessor      */     public int getHeight()     {        return this.height;     } 。

    /**      * mutator      */     public void growHeight(int h)     {         this.height = this.height + h;     } private int height;  } 。

class Woman extends Human {     /**      * new method      */     public Human giveBirth()     {         System.out.println("Give birth");         return (new Human());     } 。

} 。

  。

当我们调用对象的getClass()方法时,就得到对应Class对象的引用.

在c2中,即使我们将Women对象的引用向上转换为Human对象的引用,对象所指向的Class类对象依然是Woman.

Java中每个对象都有相应的Class类对象,因此,我们随时能通过Class对象知道某个对象“真正”所属的类。无论我们对引用进行怎样的类型转换,对象本身所对应的Class对象都是同一个。当我们通过某个引用调用方法时,Java总能找到正确的Class类中所定义的方法,并执行该Class类中的代码。由于Class对象的存在,Java不会因为类型的向上转换而迷失。这就是多态的原理.

Java进阶教程之运行时类型识别RTTI机制

getClass: 我是谁?

除了getClass()方法外,我们还有其他方式调用Class类的对象.

  。

复制代码代码如下:

public class Test {     public static void main(String[] args)     {         Class c3      = Class.forName("Human");         System.out.println(c1.getName()),

  。

        Class c4      = Woman.class         System.out.println(c2.getName());       } } 。

  。

上面显示了两种方式

1.forName()方法接收一个字符串作为参数,该字符串是类的名字。这将返回相应的Class类对象.

2.Woman.class方法是直接调用类的class成员。这将返回相应的Class类对象.

Class类的方法 。

Class对象记录了相应类的信息,比如类的名字,类所在的包等等。我们可以调用相应的方法,比如

复制代码代码如下:

getName()         返回类的名字
getPackage()      返回类所在的包

  。

可以利用Class对象的newInstance()方法来创建相应类的对象,比如

复制代码代码如下:

Human newPerson = c1.newInstance();  

newInstance()调用默认的不含参数的构建方法.

  。

我们可以获得类定义的成员

复制代码代码如下:

getFields()       返回所有的public数据成员
getMethods()      返回所有的public方法

可以进一步使用Reflection分析类。这里不再深入.

  。

Class类更多的方法可查询官方文档

http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Class.html 。

Class类的加载 。

当Java创建某个类的对象,比如Human类对象时,Java会检查内存中是否有相应的Class对象.

如果内存中没有相应的Class对象,那么Java会在.class文件中寻找Human类的定义,并加载Human类的Class对象.

在Class对象加载成功后,其他Human对象的创建和相关操作都将参照该Class对象.

最后此篇关于Java进阶教程之运行时类型识别RTTI机制的文章就讲到这里了,如果你想了解更多关于Java进阶教程之运行时类型识别RTTI机制的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com