2015-10-18 103 views
0

這是我遇到的問題的簡化版本。我試圖在類數據庫中創建一個ProduceItem數組。我概述了我在嘗試中遇到的警告和問題。提前謝謝你的幫助。在另一個類中創建一個類的數組

import javax.swing.*; 
import java.awt.*; 
public class Test{ 
    public static void main(String[] args) { 
    //attempt 1: 
    //database a; 
    // Warning: local variable a is not used. 
    // Warning: Null pointer access: The variable a can only be null at this location 

    //attempt 2: 
    //database a; 
    //a.test[0].setCode(2); 
    //local variable has not been initialize 

    //results in attempt 2 part 2 
    //database a = null; 
    //a.test[0].setCode(2); 
    //Null pointer access: The variable a can only be null at this location 
    //When I run it, Exception in thread "main" java.lang.NullPointerException 
    //at Test.main(Test.java:8) 
    //\which is a.test[0].setCode(1); 
    } 
public class ProduceItem{ 
    private int code; 
    public ProduceItem(){ 
    code = 0; 
    } 
    public int getCode(){ 
    return code;} 

    public void setCode(int a){ 
    code = a;} 
public class database{ 
    ProduceItem[] test; 
    } 
+0

a = new database()? – MadProgrammer

回答

0

你應該嘗試嘗試#2,但首先初始化數據庫a。

Database a = new Database(); 
0

在你的情況ProduceItem是一個內部類Test類和database的是一個內部類的ProduceItem。要創建內部類的實例,您必須創建封閉類的實例。

創建一個新的Test對象

Test test = new Test(); 

創建一個新的ProduceItem對象

ProduceItem pItem = test.new ProduceItem(); 

創建一個新的database項目

ProduceItem.database a = pItem.new database(); 

然後調用方法的任何元素數組ProduceItemdatabase

a.test[0].setCode(2); 

由於作爲側面說明Java中的約定是,類名用大寫字母例如啓動Database

更重要的是,您的類層次結構和帶有內部類的設計不會造成混淆,您可能需要花點時間思考它。

+0

當我創建一個新的數據庫對象'Database a = new Database();'我收到一個錯誤「沒有可以訪問類型爲Test的封閉實例必須使用一個封閉的Test類型實例來限定分配(egxnew A()where x是Test的一個實例)@ omer727 –

+0

我注意到你有內部類並相應地改變了我的答案 –

相關問題