gpt4 book ai didi

java - 初始化成员变量而不是实例变量

转载 作者:行者123 更新时间:2023-11-30 08:18:38 25 4
gpt4 key购买 nike

我在使用名为 arrayList 的类时遇到了问题,该类表示对象列表并支持通过数字位置索引随机访问其对象。

解决了 toString()size() 的问题后,我遇到了一个问题,即我没有初始化我的成员数组;仅初始化区域设置变量。然而,我的印象是我所做的修改应该可以解决这个问题。

public Object get(int a) {
if (a < 0 || a >= logicalSize) {
throw new IndexOutOfBoundsException("Positions must be from position 0 to position "+
(logicalSize - 1));
}
else {
return array[a];
}
}

但我不应该声明private static Object[] array = new Object[5]; 解决这个问题吗?

我当前收到一个抛出异常的错误,告诉我我的位置必须从 0 到 -1,表明它尚未创建。

完整代码:

public class Tester  {
public static void main(String [] args)
{
arrayList a1, a2;
a1 = new arrayList();
a2 = new arrayList(5);
a2.size();
System.out.println(a1.toString());
//System.out.println(a2.toString());
}
}

public class arrayList
{
private int logicalSize;
private static Object[] array = new Object[0];
private Object[] original;
private Object removedElement;

public arrayList()
{
Object[] array = new Object[]{null,null,null,null,null};
}

public arrayList(int i)
{
logicalSize = i;
Object[] array = new Object[logicalSize - 1];
}

public arrayList(Object[] array)
{
logicalSize = array.length;
Object[] copyArray = array;
}

public String toString(Object[] array)
{
String str = " ";

for(int a = 0; a < logicalSize; a++)
{
str = str + array[a];
}

str = str + "\nSize: " + size();
return str;
}

public int size()
{
int length = array.length;
return length;
}
}

非常感谢,Packerfan504

最佳答案

首先,您应该遵循 Java 类名称约定。它应该以大写字母开头并采用驼峰式命名法。

array当然应该static 。当您声明成员 static ,这意味着它在所有实例之间共享

在构造函数中,您设置本地变量而不是成员。

 // remove Object[] in front
array = new Object[]{null,null,null,null,null};

数组的构造函数未设置成员 array

public arrayList(Object[] array)
{
logicalSize = array.length;
//Object[] copyArray = array;
this.array = array;
}

这不会执行任何复制:成员引用作为参数传递的数组。我想要某种“复制构造函数”,您需要实际实例化一个新数组并复制每个元素。或者使用 Arrays.copyOf() .

您应该覆盖 toString()方法来自java.langObject具有正确的签名(为什么将数组作为参数传递?)。 Java 中的所有类都隐式扩展 Object类(class)。

您应该区分 Object[]数组大小 - 这是在需要增加数组之前拥有的潜在槽数,以及反射(reflect)您放入数组中的元素数量的逻辑大小。这里你将逻辑大小设置为array.length,这只是多余的信息。

<小时/>

编辑其他建议

在以大小作为参数的构造函数中,创建一个 (ticalSize-1) 数组。为什么?

在默认构造函数中,您不会初始化 logicalSize ,然后将其设置为 0 。对我来说没问题,但是,为什么你要把它设置为 i在构造函数中以大小作为参数?那么在 a1.get(0) 中就很正常了:

if (a < 0 || a >= logicalSize) {...}

true并抛出异常。

我建议您澄清 logicalSize 的角色(对我来说)这是 ArrayList 中实际对象的数量。请注意,在您的测试中,您还没有在数组中放入任何东西。即使你有一个可以容纳 5 个对象的内部数组,直到你 add(...)有事,打电话get(0)应该抛出异常。

关于java - 初始化成员变量而不是实例变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29305828/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com