Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么会引发ArrayStoreException?_Java - Fatal编程技术网

Java 为什么会引发ArrayStoreException?

Java 为什么会引发ArrayStoreException?,java,Java,我正在尝试编写自己的ArrayList类 我的代码如下: package test; import java.util.Arrays; import java.util.*; public class MyArrayList { private Object[] objects = null; private int currentSize = 0; public void add(Object obj) { increaseSize();

我正在尝试编写自己的ArrayList类

我的代码如下:

package test;
import java.util.Arrays;
import java.util.*;

public class MyArrayList {
    private Object[] objects = null;
    private int currentSize = 0;

    public void add(Object obj) {
        increaseSize();
        objects[currentSize++] = obj;
    }

    public Object get(int index) {
        if (currentSize >= index) 
            return objects[index];
        else 
            throw new ArrayIndexOutOfBoundsException();
    }

    public void remove(int index) {
        if (currentSize >= index) {
            for (int i = index; i < currentSize; i++) {
                objects[i] = objects[i + 1];
            }
            objects[currentSize--] = null;
        }
        else throw new ArrayIndexOutOfBoundsException();
    }

    public int size() {
        return currentSize;
    }

    private void increaseSize() {
        if (objects == null) objects = new Objects[1];
        else objects = Arrays.copyOf(objects, objects.length + 1);
    }

    public static void main(String args[]) {
        MyArrayList l = new MyArrayList();
        Integer integ = new Integer(1);
        l.add(integ);
        for (int i = 0; i < l.size(); i++)
        System.out.println("Element " + i + " = " + l.get(i));
    }
}
封装测试;
导入java.util.array;
导入java.util.*;
公共类MyArrayList{
私有对象[]对象=null;
私有int currentSize=0;
公共无效添加(对象obj){
增加大小();
对象[currentSize++]=obj;
}
公共对象get(int索引){
如果(当前大小>=索引)
返回对象[索引];
其他的
将新的ArrayIndexOutOfBoundsException()抛出;
}
公共无效删除(整型索引){
如果(当前大小>=索引){
对于(int i=索引;i
如果我试图初始化increaseSize()中的对象,则会得到ArrayStoreException。如果我在一开始初始化对象,我就不会再出现这种异常


谁能解释一下原因吗

您的问题是一个非常简单的错误:

您不是在创建对象数组,而是在创建对象s数组

这将只允许存储对象。因此,当您尝试添加Integer对象时,会出现ArrayStoreException。因为Integer不是对象。(java.lang.Objects是一个具有一些静态帮助器方法的实用程序类)

因此,只需更改为:

objects = new Object[1];

您正在创建类型为
对象的数组

if (objects == null)
    objects = new Objects[1];
Objects
java.util.Objects
,因为您已经从
java.util
导入了所有内容:

import java.util.*;
虽然您可能指的是
对象的数组
s:

if (objects == null)
    objects = new Object[1];

当您尝试在数组中存储某些东西时发生错误。不幸的是,java中的数组类型是协变的,这导致了类似的问题。

提示:当创建和抛出异常时,考虑为它们提供消息。使调试更加容易。现在您将看到刚才抛出了一些异常;但您没有提供任何有助于调试的信息(如currentSize和index的值)。和:总是在你的街区周围使用{};即使只是一行别的东西。
objects=newobjects[1]
-objects是一个打字错误吗?@AndyTurner:这是一个很好的添加,不需要回滚,谢谢。