.class 字节码文件与Java RTTI(类型信息)(.class 类对象)

RTTI:Run-Time Type Information,关键词在 Run-Time,运行时的,而非编译期确定的关于类型的信息。运行时的类型信息(RunTime Type Information)使得可在程序运行时发现、识别和使用类型信息。

Java 在运行时识别对象和类的信息,主要包括以下两种方式:

  • “传统的”RTTI,假定我们在编译期即已知道所有的类型;
  • “反射”机制,允许在运行时发现和使用类的信息;

0. .class 文件

  • 每个类(ClassName)编译后会生成 ClassName.class 文件;

  • 类中的静态类也会被编译出单独的 .class 文件,文件名为 ClassName$InnerClassName.class

  • 类中的匿名内部类也会被编译出单独的 .class 文件,文件名为 ClassName$1.class(因为是匿名的),常见的匿名内部类如下:

    new Thread(new Runnable() {
    	public void run() {};
    }
    );
    

1. RTTI 与类型转换

在 Java 中,所有的类型转换都是在运行时进行正确性检查的,这也正是 RTTI(Run-Time Type Information)名字的含义:在运行时,识别一个对象的类型;

2. Class 对象

为了理解 RTTI 在 Java 中的工作原理,还必须知道类型信息在程序运行时是如何表示的。这项工作便是交由 Class 对象(特殊对象)完成,其包含了与类有关的信息。事实上,Class 对象便是用来创建类的所有常规对象的。

类是程序的一部分,每个类都有一个 Class 对象。换言之,每当编写并且编译了一个新类,就会产生一个 Class 对象(更具体地讲,便是保存在一个同名的 .class 文件中)。为了生成该类对象,运行该程序的 JVM 将使用被称为“类加载器”的子系统。

3. 类对象(Class object)

<a href=“https://stackoverflow.com/questions/15078935/what-does-class-mean-in-java”, target="_black">What does .class mean in Java?

类名后的 .class是对类对象(Class object)的引用,用以表示该类。如下代码:

Print myPrint = new Print();
System.out.println(Print.class.getName());
System.out.println(myPrint.getClass().getName());
  • Print.class:便是用以表示运行时(runtime)Print类的对象(object)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五道口纳什

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值