ParentClass是父类,ChildClass是子类,声明两个类的数组后,执行如下操作:
ParentClass[] pArray;
ChildClass[] cArray = new ChildClass[10];
pArray = cArray;
pArray[0] = new ParentClass();
cArray[0].childMethod();
编译没有问题,但是当程序执行到pArray[0] = new ParentClass();报错:
Exception in thread "main" java.lang.ArrayStoreException: study.inherite.ParentClass
at study.inherite.ParentClass.main(ParentClass.java:30)
原因应该是cArray[0]和pArray[0]都指向了同一个ChildClass引用(ChildClass[] cArray = new ChildClass[10];初始化指定的)
执行pArray = cArray;不会有问题,但是当执行pArray[0] = new ParentClass();时,pArray[0]指向的真正的ChildClass引用被赋值为new ParentClass(),因此出错。
分享到:
相关推荐
许多初学者会误用指针和数组,例如,将指针误认为数组,或者在没有正确计算长度的情况下使用指针遍历数组,这些都可能导致运行时错误。 在“混淆指针和数组所导致的错误”这篇文章中,可能涉及了以下几点: 1. **...
在实现旋转功能时,如果直接操作原数组,可能会导致错误,因为旋转方块涉及到元素的位置交换。使用数组引用,我们可以先复制方块的当前状态到一个新的临时数组,然后在临时数组上进行旋转操作,最后再将结果写回原...
2. **边界保护**:当数组的大小发生变化时,模块会确保所有相关的索引引用仍然有效,防止因数组大小调整而导致的错误。 3. **异常处理**:设置异常处理机制,当错误发生时,可以捕获异常并进行适当处理,如记录错误...
但是,初始化时的元素数量和位置需要与数组的维度相匹配,否则将导致编译错误或未初始化的元素。 ### 初始化注意事项 数组的初始化有多种方式,包括完全初始化、部分初始化以及默认初始化。完全初始化是指所有元素...
因此,使用弱引用时,必须确保在引用失效后及时清理缓存,以避免空指针异常或其他错误。 总结,JNI是Java与本地代码交互的重要工具,熟练掌握JNI访问数组、引用管理、异常处理和缓存策略是优化Java本地接口性能的...
在给定的标题和描述中,提到的问题正是这种异常的一个实例,具体表现为尝试将一个方法返回的数组直接赋值给另一个数组时导致的错误。 首先,我们需要理解这个问题的原因。当一个方法返回一个数组时,这个数组在内存...
在处理数组时,有时我们需要清空数组,以便重新利用或避免遗留数据导致的问题。本文将详细探讨如何正确地清空JavaScript数组,并介绍一些常见的注意事项。 首先,让我们看一个简单的例子,其中包含一个错误的清空...
- **类型匹配**:数组内的元素类型必须一致,不能将不同类型的值赋给数组元素,如 `data[0] = "iiii"`会导致编译错误。 3. **二维数组的声明和使用** - 二维数组是数组的数组,用于表示表格状数据。声明格式类似...
在这个错误版本的实现中,开发者可能尝试通过数组来模拟链表的一些特性,如动态增长、插入和删除操作。然而,由于数组和链表的本质区别,这种实现可能会遇到一些挑战。 首先,链表的主要优势之一是动态扩展性。链表...
这种错误通常是由于程序员对数组边界理解不清或逻辑错误导致的。 2. **空指针异常**: - 空指针异常(`NullPointerException`)发生在试图访问或操作一个值为`null`的对象引用时。Java中的对象引用可能为`null`,...
- **合理规划数组大小**:在设计程序时,应根据具体需求合理规划数组大小,避免过大的数组浪费内存资源,同时也要确保不会因数组容量不足而导致频繁的数组重建操作。 - **利用数组特性优化性能**:由于数组在内存中...
2. **数组的范围**:传递的元素必须在数组的有效索引范围内,否则会导致运行时错误。 3. **引用和复制**:在VB中,基本类型(如Integer)的传递是按值传递,这意味着函数或过程中对参数的修改不会影响到原始数组的值...
1. **循环条件错误**:在遍历数组或集合时,可能会因为循环条件设置不当导致超出边界。例如,`for`或`foreach`循环的终止条件可能设置得过大。 2. **动态索引计算错误**:如果你在运行时计算索引,确保所有计算都是...
这是因为数组名代表的是一块连续的内存区域,而直接赋值会导致语法错误。要复制一个数组的内容到另一个数组,应使用如`strcpy`(字符串复制)或手动循环赋值等方法。同样,比较两个数组的内容也不能简单地使用`==`...
在进行这些操作时,需要注意的是,如果数组长度不改变,直接操作原有的数组对象,可能会导致数据覆盖或越界问题。因此,如果需要修改数组长度,必须先创建一个新的数组对象。此外,由于反射操作涉及安全性,直接修改...
虽然指针提供了强大的功能,但其复杂性也可能导致错误的发生。因此,对于程序员而言,深刻理解指针和数组的工作原理是非常必要的。在后续的学习过程中,建议参考更多专业书籍,例如《C与指针》等,以便更加全面地...
•数组最常用的用法就是访问数组元素,包括对数组元素赋值和访问数组元素的值,访问数组元素是通过在数组引用变 量后紧跟一个方括号([ ]),方括号里是数组元素的索引值。 •Java语言的数组索引是从0开始的,...
如果省略了类型修饰符,编译器可能无法确定预期的数据大小,从而导致错误。 4. **引用数组元素**: 在汇编中,数组元素的引用类似直接寻址或间接寻址。例如,`mov ah, [abc]`实际上指的是`mov ah, byte ptr ds:...
PHP还提供了一个`nApplyCount`字段,用于防止循环引用导致的无限循环。当对数组进行遍历时,这个计数器会递增,如果递增超过一定限制,将触发错误,避免无限循环。 总结起来,使用`foreach`遍历PHP数组时,对于关联...