Java 为什么在另一个类中调用这些数组元素时会变为null?

Java 为什么在另一个类中调用这些数组元素时会变为null?,java,Java,我实例化了我的消息对象,并将它们放在这个消息数组(收件箱)中。这是在Identify类中完成的。然而,当我试图在我的Filter类中获取这些消息对象时,对象本身将变为null,我从中什么也得不到。为什么? 以下是用于识别电子邮件的方法: public void identifyEmail(String input1) throws IOException, NumberFormatException, ArrayIndexOutOfBoundsException, EmptyArrayE

我实例化了我的消息对象,并将它们放在这个消息数组(收件箱)中。这是在Identify类中完成的。然而,当我试图在我的Filter类中获取这些消息对象时,对象本身将变为null,我从中什么也得不到。为什么?

以下是用于识别电子邮件的方法:

public void identifyEmail(String input1)
    throws IOException, NumberFormatException,
ArrayIndexOutOfBoundsException, EmptyArrayException
{
inFile = new File(input1);
in = new Scanner(inFile);
int MESSAGE_AMOUNT = countMessage(input1);

    for(int i = 0;i<MESSAGE_AMOUNT;i++){
            noMoreMail = true;
            emailAddress = find(input1,"From:");
            if(noMoreMail){
                break;
            }
            MIN = extractInt(find(input1,"MIN:"));
            message = getMessage(input1);
            target++;

            ib.addMessage(MIN, emailAddress, message);
    }
}
这就是问题所在。当它在Filter类中循环浏览电子邮件时,只会浏览空消息

for(int i=0; i<ib.messageCount; i++){
        Message email = ib.inbox[i];
        System.out.println(email.getMIN());

        test1 = checkBlackList(email);
        if(!test1){test2 = checkKeyword(email);}
        // if spam mail is not on black list but still is spam

        if(test1){updateKeywords(email);}
        if(test2){addToBlackList(email);}
        if(test1 || test2){
            minToAdd = addToMINList(email);
        }
    }

for(int i=0;i如果不直接填充数组的成员,那么该数组只是一个
null
值或基本类型的默认值的加载

范例


因此,您可以看到,只需声明数组,就不会定义它的元素。

我建议使用消息对象的ArrayList,而不仅仅是使用数组,因为它将为您提供多种功能

查看您的代码,我怀疑问题可能出在addMessage()方法中

这不是答案,应视为评论。请不要将其视为答案。 我没有足够的权限发表评论


请不要否定它。

如果没有更多的代码,很难说,但我猜你有两个不同的收件箱对象,你的第一个类正在填充一个,而你的第二个类正在读取一个空白对象,而不是引用同一个对象。
inbox=newmessage[100]
创建一个100
null
s的数组。这就是您所期望的吗?是的,尽管我只想创建一个收件箱数组。@KevinDiTraglia那么我如何正确引用收件箱对象?当我在inbox类中取出显式构造函数时,问题仍然存在。我以为我知道如何引用对象,但这是错误的st让我困惑。我修复了它。我首先使用ArrayList而不是数组来保存消息。然后我将其设置为静态,因此引用应该指向该ArrayList。我不知道这是否是一个长期解决方案,但到目前为止似乎对我有效。这是一个新问题。代码无法加载,因此我将其放在主帖子上。我看到了。您的addMessage方法看起来很好d、 无论Chris说什么都是正确的,您必须初始化数组的大小。它是数组的动态实现,在所有适用于代码的基本函数中都会对您有所帮助。要正确执行,我建议使用java.util.ArrayList。
for(int i=0; i<ib.messageCount; i++){
        Message email = ib.inbox[i];
        System.out.println(email.getMIN());

        test1 = checkBlackList(email);
        if(!test1){test2 = checkKeyword(email);}
        // if spam mail is not on black list but still is spam

        if(test1){updateKeywords(email);}
        if(test2){addToBlackList(email);}
        if(test1 || test2){
            minToAdd = addToMINList(email);
        }
    }
public void addMessage(int MIN, String emailAddress, String message){
    if(messageCount < 100){
    Message m = new Message(MIN, emailAddress, message);
    inbox[messageCount] = m;
    messageCount++;
    } else {
    increaseSize();
    Message m = new Message(MIN, emailAddress, message);
    inbox[messageCount] = m;
    messageCount++;
    }
}
String[] strs = new String[10];
// Strs = {null, null .... null}

Object[] objs = new Object[10];
objs[0] = new Object();

// objs = {new Object(), null, null ... null}
ib is the object of Inbox class. When you are calling the method addMessage, are you 
updating messages in the inbox array of the 'this'(i.e. the ib ) object? or you are
instantiating another Inbox object and adding the Messages there?

Could you furnish the addMessage() code up here...?