2015-10-18 65 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

我注意到你有内部类并相应地改变了我的答案 –

相关问题