为什么我得到nullPointerException

时间:2012-10-25 20:19:11

标签: java arraylist nullpointerexception

我有以下代码;但是,似乎我正在访问arraylist中不存在的索引......这是代码。任何帮助表示赞赏。

import java.util.*;

public class Main {


    public static void main(String[] args) {

        ArrayList<BankAccount> allAccounts = new ArrayList<BankAccount>();

        Customer john = new Customer();
        john.firstName = "John";
        john.lastName = "Doe";

        BankAccount johnBa = new BankAccount();
        johnBa.accNumber = "111-222-333";
        johnBa.balance = 200;
        johnBa.myCustomer = john;

        Customer nick = new Customer();
        nick.firstName = "Nick";
        nick.lastName = "James";

        BankAccount nickBa = new BankAccount();
        nickBa.accNumber = "222-333-444";
        nickBa.balance = 100;

        allAccounts.add(johnBa);
        allAccounts.add(nickBa);

        ArrayList<Customer> allCust = new ArrayList<Customer>();
        allCust = extractCustomers(allAccounts);

        for(Customer c : allCust) {
            System.out.println(c.firstName+" "+c.lastName);
        }       


    }

    static ArrayList<Customer> extractCustomers(ArrayList<BankAccount> ba) {
        ArrayList<Customer> cu = new ArrayList<Customer>();

        for(BankAccount b: ba) {
            cu.add(b.myCustomer);
        }

        return cu;
    }

}


public class BankAccount {

    String accNumber;
    double balance; 

    Customer myCustomer;

}

public class Customer {

    String firstName;
    String lastName;

}

2 个答案:

答案 0 :(得分:4)

 BankAccount nickBa = new BankAccount();
        nickBa.accNumber = "222-333-444";
        nickBa.balance = 100;

此处没有为第BankAccount分配客户。

但是,您正在尝试打印客户详细信息。第二个BankAccount c将是null。对null引用的任何操作都会导致NullPointerException

 for(Customer c : allCust) {
            System.out.println(c.firstName+" "+c.lastName);
        }   

在对c进行任何调用之前,请确保c不是null以避免NullPointerException

  for(Customer c : allCust) {
           if(c != null){
            System.out.println(c.firstName+" "+c.lastName);
               }
        } 

答案 1 :(得分:0)

您需要在BankAccount类中初始化您的客户obj,如下所示。

Customer myCustomer = new Customer();

此外,不建议您像访问类一样访问类变量。通过调用getCustomer()

创建get和set方法并访问Customer obj