异常-java核心技术中一个关于数组的例子不理解,请教大家

问题描述

java核心技术中一个关于数组的例子不理解,请教大家

Person是Employer的父类,Employer有个新方法setBonus,代码如下

Employer[] emprs ={new Employer("张三"),new Employer("李四")};
Person[] ps =emprs;
ps[0] = new Person("小明");//运行时该行报错ArrayStoreException
emprs[0].setBonus(2000);

书中给出的解释是要保持数组中的元素对象类型一致,
我不理解的是ps定义的元素的类型是Person,为什么在这里不能ps[0] = new Person("小明"),ps[0]不是只是对new Person("小明")的一个引用吗?他又不是Employer类型,我去给它赋值为Person类型有什么不可?

另外以上代码如果不用数组的形式,就是两个对象这么操作下,是没有错误的。

可能我以上的理解本身有错误,请大家指教指正。

解决方案

有错别字,重新说一次:

emprs[0]和 ps[0]这两个引用都指向了Employer对象,现在你要把ps[0]指向的对象换成person对象,emprs[0]也会同时修改为指向该对象。而emprs[0]是Emloyer对象,这就成了“子类的引用执行父类对象”,这是不可以的。所以报错。

解决方案二:

你试试
Person[] emprs ={new Employer("张三"),new Employer("李四")};

解决方案三:

emprs[0] 和 ps[0]这两个引用都指向的是 Employer对象,现在你要把ps[0]指向的对象皇城person对象,那么emprs[0]也会执行这个对象,而emprs[0]是Emloyer对象,这就成了“子类的引用执行父类对象”,这是不可以的。所以报错。

时间: 2024-12-10 07:01:55

异常-java核心技术中一个关于数组的例子不理解,请教大家的相关文章

java 泛型 类型擦除-Java 核心技术中泛型的使用

问题描述 Java 核心技术中泛型的使用 在看Java核心技术的过程中有个问题不明白,求各位大神指导. 书中写到: 不能构造一个泛型数组: public static T[] minmax(T[] a) { T[] mm = new T(2); ... } 书中的解释是类型擦除会让这个方法永远构造Object[2]数组. 什么叫永远构造Object[2]数组?是死循环?还是说构造的是Object[2]数组而不是T[2]数组 解决方案 说构造的是Object[2]数组而不是T[2]数组

java swing中一个JTree如何在多个panel中显示

问题描述 java swing中一个JTree如何在多个panel中显示 要实现的功能是 需要在2个panel(A, B )中显示用户组的树结构, 其中有一个panel(B)中提供了对树的增删改,运行程序首先显示A, 通过A上的按钮点击事件显示B, 要在B更改同时更新A上的显示情况, 现在遇到的情况是:当点击A上的按钮显示B时,A上的tree就不见了: 怎么解决啊? A的部分代码 DefaultMutableTreeNode root = new DefaultMutableTreeNode("

Java网络爬虫 - 一个简单的爬虫例子

WikiScraper.java package master.haku.scrape; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import java.net.*; import java.io.*; public class WikiScraper { public static void main(String[] args) { scrapeTopic("/wiki/Python"); } public

class-java注解中一个参数是数组类型,为什么我可以指定一个数组元素而非数组为值

问题描述 java注解中一个参数是数组类型,为什么我可以指定一个数组元素而非数组为值 比如说@Target()这个注解,它的value是一个ElementType[]类型,为什么可以这样写: @Target(ElementType.METHOD) 这样类型可以匹配上吗?这不相当于把一个元素赋给了一个数组? 解决方案 对这个相当于申请了一个数组长度为一的数组,然后放置你的这个唯一值: 当多个的时候,就需要用数组符号{}限制了. 可以自定义一个这样的注解,然后练习获取试试

Java编程中应用dom4j轻松地处理XML文档

dom4j是Java平台中一个简单易用的XML处理工具,它使用的是Java的Collections架构,提供了对DOM,SAX,JAXP的完整支持. 1.创建新的XML文档 import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; public class Users { public Document createDocument() { Document document = D

java-Java方法中一个返回值类型为基本数据类型long,return语句可以是一个对象吗

问题描述 Java方法中一个返回值类型为基本数据类型long,return语句可以是一个对象吗 Java方法中一个返回值类型为基本数据类型long,return语句可以是一个对象吗 解决方案 可以返回Long对象 比如 return new Long(3); 解决方案二: long是个值类型

在java中一个方法抛两个异常会怎样

问题描述 在java中一个方法抛两个异常会怎样 在一个java方法中同时用throw和throws抛出异常.会有不良的影响么.会不会有一个一个异常抛不出去的情况发生啊?求大神帮帮忙 解决方案 他俩用的地方不一样,throws是写在方法后面,其他地方调用时,要捕获,throw是在方法内直接抛出,可以一起用throw触发了,估计就到不了throws的捕获了,看你具体怎样用的 解决方案二: 方法声明时可以抛出异常,但是并不代表调用这个方法时会发生异常. 测试要构造异常条件才能走入异常分支的啊.例如:

浅析Java语言中两种异常的差别

Java提供了两类主要的异常:runtime exception和checked exception.所有的checked exception是从java.lang.Exception类衍生出来的,而runtime exception则是从java.lang.RuntimeException或java.lang.Error类衍生出来的. 它们的不同之处表现在两方面:机制上和逻辑上. 一.机制上 它们在机制上的不同表现在两点:1.如何定义方法;2. 如何处理抛出的异常.请看下面CheckedExc

Java开发中常见的异常问题

作为一名游戏开发者,程序员,很自然必须熟悉对程序的调试方法.而要调试程序,自然需要对程序中的常见的异常有一定的了解,这些日子很多朋友都提出了很多问题,都是关于游戏中的报错,因此在这里我将一些常见的程序中的异常列举出来给大家参考: 1. java.lang.NullPointerException 这个异常大家肯定都经常遇到,异常的解释是"程序遇上了空指针",简单地说就是调用了未经初始化的对象或者是不存在的对象,这个错误经常出现在创建图片,调用数组这些操作中,比如图片未经初始化,或者图片