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

为什么向下转换会引发异常?

翟淮晨
2023-03-14
问题内容

在Java中:

Base b = new Base();
Derived d = (Derived)b;

抛出ClassCastException。为什么?为什么Exception在这里投降?我不知道原因。


问题答案:

让我重命名您的班级,以使事情更加清楚。 Base-> AnimalDerived-> Cat

仅仅因为你是一个Animal人并不意味着你是一个人Cat。你可能是一个Dog。这就是将A强制Animal转换为A的原因Cat

另一方面,每个CatAnimal吗?答案是“是”。这就是为什么您 可以 编写如下代码

Animal animal = new Cat();

要么

Cat cat = new Cat();
Animal animal = cat;

另外值得注意的是,您 可以 执行以下操作:

Animal animal = new Cat();
Cat cat = (Cat) animal;

这样做的原因是您的animal变量实际上是在引用Cat实例。因此,您可以将其强制转换回引用的变量Cat



 类似资料:
  • 问题内容: 因此,我知道IEEE 754为不是实数的值指定了一些特殊的浮点值。在Java中,铸造这些值的原始不会 不 抛出异常像我本来期望。相反,我们有以下内容: 在这些情况下 不 抛出异常的理由是什么?这是IEEE标准,还是Java设计者的选择?我是否不知道有这样的强制转换是否可能导致异常后果? 问题答案: 在这些情况下不抛出异常的理由是什么? 我认为原因包括: 这些都是极端情况,在执行此类操作

  • 问题内容: 我想知道为什么在引用“ w”之后会引发错误。您不是通过说obj = w来创建另一个指向该w实例的指针吗?也就是说,为什么与说谢谢一样呢? 问题答案: 没有什么比早上引用JLS更重要。 JLS 6.3。宣言的范围: 块中的局部变量声明的范围(第14.4节)是该声明在其中出现的其余部分,从其自身的初始化程序开始,并在局部变量声明语句的右侧包括其他任何声明符。 和 JLS 14.2 方块:

  • 问题内容: 在这段代码中,为什么使用结果为no 或循环捕获所有异常然后静默退出?在这种情况下,为什么会有多余的?还是由以下 原因引起的? 假设由触发。什么时候产生的? 如果我手动执行以下操作: 在这种情况下,为什么看不到追溯? 问题答案: 该循环监听明确。 该语句的目的是循环遍历迭代器提供的序列,并使用异常表示当前迭代器已完成。不会捕获被迭代的对象引发的其他异常,只是那个异常。 这是因为正常的预期

  • 根据 Spark 文档,只有 RDD 操作可以触发 Spark 作业,并且在对其调用操作时会延迟评估转换。 我看到< code>sortBy转换函数被立即应用,并在SparkUI中显示为一个作业触发器。为什么?

  • 为什么这段代码不抛出?看一看: 我不知道!

  • 本文向大家介绍解释下为什么 会换两行?相关面试题,主要包含被问及解释下为什么 会换两行?时的应答技巧和注意事项,需要的朋友参考一下 p { display: block; margin-block-start: 1em; margin-block-end: 1em; margin-inline-start: 0px; margin-inline-end: 0px; } 查阅p标签的用户代理可知,默