当前位置: 首页 > 面试题库 >

Java术语,用于区分运行时类型与编译时类型

翟宾实
2023-03-14
问题内容

在Java中,Object可以具有运行时类型(即创建时的类型)和强制类型(您将其强制转换为的类型)。

我想知道这些类型的 专有 名称是什么。例如

class A {

}

class B extends A {

}

A a = new B();

创建为,B但声明为A。引用a每个透视图类型的正确方法是什么?


问题答案:

我认为,区分 对象 (存在于执行时,只是具有执行时间类型)和具有编译时类型的 表达式 (例如变量)之间,这一点很重要。

因此,在这种情况下:

A a = new B();

a是类型的变量A。它在执行时的值是对type对象的引用B

Java语言规范对对象的类型使用“运行时类”(例如,为了重载,如15.12.4.4节中所述)。在其他地方,我认为它只是将“
type”用作表达式的类型,即编译时类型。



 类似资料:
  • 问题内容: Java中任何对象的编译时间和运行时类型之间有什么区别?我正在阅读《有效的Java》一书,Joshua Bloch在Item 26中多次提到了数组实例的编译时类型和运行时类型,主要是为了说明抑制强制转换警告有时是安全的。 在这里,作者正在讨论数组上下文中的这些不同类型。但是通过这个问题,我想了解vs与任何类型的对象之间的区别。 问题答案: Java是一种静态类型的语言,因此编译器将尝试

  • 问题内容: 我该如何实现? 到目前为止,我尝试过的所有操作始终返回类型,而不是所使用的特定类型。 问题答案: 正如其他人所提到的,只有在某些情况下才能通过反思来实现。 如果你确实需要类型,这是通常的(类型安全的)解决方法:

  • 问题内容: 我该如何实现? 到目前为止,我尝试过的所有操作始终返回类型,而不是所使用的特定类型。 问题答案: 正如其他人所提到的,只有在某些情况下才能通过反射来实现。 如果你确实需要类型,这是通常的(类型安全)解决方法:

  • 问题内容: 我正在编写一个规则引擎,该引擎执行由条件构造确定的简单分配。规则必须为XML格式,这是项目的先决条件。我已经将XML模式建模为类似于简单的代码块。我希望解析XML,然后将其转换为Java代码。然后,我希望在运行时编译(并运行)此代码。这样做意味着我的规则引擎不再充当解释器,而是执行本机Java字节码。 我已经确定了解析阶段,或多或少的Java代码生成阶段。我现在想弄清楚最后一个阶段-运

  • 问题1: 为什么下面的代码在没有return语句的情况下进行编译? 注意:如果在while之后添加return,则会得到。 问题2: 另一方面,为什么下面的代码会编译, 即使下面的不是。

  • 问题内容: 假设通用类型声明(Java) 我如何在运行时实例化一个Type对象,该对象表示通过特定类型T(也仅在运行时才知道)进行参数化的Foo? 问题答案: 我想我明白你的问题。您想要序列化一个,并且在运行时具有class对象(但在编译时不是固定的)。因此,在Gson中建议的创建匿名子类的解决方案不起作用,因为这要求在编译时对参数化类型(例如)进行硬编码,并且如果使用,则该解决方案不起作用。 但