2012-07-31 62 views
4

在下面的代码中,我试图避免为类的实例分配内存的最后三行。有关如何将内存分配部件放入类定义中的任何建议?因此,我想要做的是能够执行pInfo[0].sValue="string";之后AClass [] pInfo = new AClass[10];Java:为一组对象分配内存的有效方式

class AClass { 
    private String sName=""; 
    private String sValue=""; 
    } 

    AClass [] pInfo = new AClass[10]; 

    // how to avoid the code below or bring them into class definition? 

    pInfo[0] = new AClass(); 
    pInfo[1] = new AClass(); 
     ... 
    pInfo[9] = new AClass(); 

编辑:我说的效率是代码+代码的可读性量

+1

你的意思是*输入有效*或*性能高效*? – Yogu 2012-07-31 20:20:02

+0

利用构造函数参数来初始化字段可能更好,所以你可以这样写: 'AClass [] pInfo = new AClass [] {new AClass(“name-1”,“value-1”) ,...};' – oldrinb 2012-07-31 20:24:04

+0

@Yogu代码量+代码可读性 – 2012-07-31 20:28:47

回答

7
AClass[] pInfo = {new AClass(),new AClass(), etc.}; 

OR

AClass[] pInfo = new AClass[10]; 

for(int i = 0; i < pInfo.length; i++) 
{ 
    pInfo[i] = new AClass(); 
} 
1

你可以试试这样:

class AClass { 
    public String sName=""; 
    public String sValue=""; 
} 

class AClassArray { 
    public AClass[] pInfo; 

    public AClassArray() { 
     pInfo = new AClass[10]; 
     for(int i = 0; i < pInfo.length; i++) 
      pInfo[i] = new AClass(); 
    } 
} 

用途:

AClassArray aClassArray = new AclassArray(); 
aClassArray.pInfo[i].sXXXX; 
+0

当他调用pInfo [0] .foo时,会产生空指针 – Woot4Moo 2012-07-31 20:20:33

+0

@ Woot4Moo:点击提交得太快 – 2012-07-31 20:22:26

+0

这个工作,但不是非常可扩展。你最好使用Vector或List,而不是重新发明轮子。 – 2012-07-31 20:22:59

1

有没有办法避免这种情况,您将需要一个值明确分配到阵列中的每个元素。

JLS §10.3指出数组在创建时为其元素提供初始值。

JLS §4.12.5指出参考类型的初始值是null

0
class AClass { 
    private String sName=""; 
    private String sValue=""; 

    public static final AClass[] getArrayOfObjs(int size){ 
    if(size <= 0) 
     return null; //You can also create your custom exception to be thrown here 
    AClass[] array = new AClass[size]; 

    for(int i = 0; i < size; i++) 
    { 
     array[i] = new AClass(); 
    } 
    return array; 
    } 
} 

然后实例为

AClass [] pInfo = AClass.getArrayOfObjs(10); 
+2

如果大小<0,这个对象可以被利用,因为它会抛出一个异常并且不是最终的。 – Woot4Moo 2012-07-31 20:24:10

+0

@ Woot4Moo谢谢指出 – 2012-07-31 20:27:31