java数组中的ArrayStoreException
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java数组中的ArrayStoreException,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1621字,纯文字阅读大概需要3分钟。
内容图文
![java数组中的ArrayStoreException](/upload/InfoBanner/zyjiaocheng/794/b709649270cc4cf4a931c8ca1bc1ec60.jpg)
这是Core Java一书中的一个例子
两级员工和经理.经理扩展了员工.下面的代码
Manager[] mans ={new Manager("Adam"),new Manager("Ben")};
Employee[] emps =mans ;
emps[0] = new Employee ("Charlie");//throws ArrayStoreException in runtime actually;
作者说,在这种情况下,数组中的元素应该重新保持相同的类型,否则会抛出ArrayStoreException.
在我看来,emps [0]只是对’new Employee(“Charlie”)实例的引用,而emps [0]的类型是之前声明的Employee.所以它为什么抛出异常.我的基础知识有问题吗?
解决方法:
创建数组时,它会记住它要存储的数据类型.所以,如果你有课程
class Employee { .. }
class Manager extends Employee { .. }
你会创建数组
Manager[] arrM = new Manager[10];
array会记住它只需要存储Manager类的实例或其派生类型.但是这样的数组不能存储超类型的Manager,因为超类型可能没有Manager类的所有方法或字段
arrM[0] = new Manager();
没关系,但是
arrM[0] = new Employee();
抛出java.lang.ArrayStoreException:Employee指出Employee在这里不是正确的参数.
所以在你的情况下,你是
>为Managers创建数组
Manager[] mans ={new Manager("Adam"),new Manager("Ben")};
>使用超类型Employee创建对此数组的引用
Employee[] emps =mans;
(但是这个引用仍然指向只能容纳Menagers的数组)
>并尝试将阵列放入新的员工中
emps[0] = new Employee("Charlie");
但正如我所提到的,这是不允许的,因为员工可能没有与经理相同的成员.让我们说Menager可以雇用(……)某人,而员工则不能(没有这种方法).如果你打电话会发生什么
mans[0].hire(new Employee("Tom");
和emps [0] =新员工(“查理”);不会抛出异常,但会让你把员工放在emps [0]?由于mans和emps使用相同的数组,这意味着mans [0] .hire(新员工(“Tom”)将从Employee(“Charlie”)调用,因为员工没有雇用方法而不能雇用任何人.
这就是为什么你不能在管理器数组中放置超类型(Employee)的实例.
内容总结
以上是互联网集市为您收集整理的java数组中的ArrayStoreException全部内容,希望文章能够帮你解决java数组中的ArrayStoreException所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。