簡體   English   中英

無法弄清楚為什么我得到了java.lang.NullPointerExceptio

[英]Can't figure out why I'm getting a java.lang.NullPointerExceptio

我看着其他胎面,但仍然找不到我要去哪里。 我正在嘗試制作一個Account對象數組,並從一個文本文件進行掃描以填充它。 感謝您的幫助或指導。

import java.util.*;
import java.io.*;


public class Bank {

    private static Account[] accounts = new Account[10];
    private static int numAccounts = 0;

    public static void main(String[] args) throws Exception  { 
        Scanner fileScan = new Scanner(new File("bankdata.txt"));

        for(int i=0; i<accounts.length;i++){
            accounts[i] = new Account(null, i, i); //(client, balance, accountNum)
        }

        while(fileScan.hasNext()){
            accounts[numAccounts].getClient().setFName(fileScan.next());
            accounts[numAccounts].getClient().setLName(fileScan.next());
            accounts[numAccounts].getClient().setAge(fileScan.nextInt());
            accounts[numAccounts].getClient().setPhoneNum(fileScan.nextInt());
            accounts[numAccounts].setBalance(fileScan.nextDouble());
            accounts[numAccounts].setAccountNum(fileScan.nextInt());

            numAccounts++;
            System.out.println(accounts[numAccounts]);
        }
        fileScan.close();
    }
}

查看如何初始化Account對象,所有的Clients都為空:

accounts[i] = new Account(null, i, i); //(client, balance, accountNum)

然后,當您嘗試使用Client變量時,

accounts[numAccounts].getClient().setFName(fileScan.next());

您會拋出NPE。

解決方案:不要使用空客戶端。 在while循環中創建您的客戶端:

while(fileScan.hasNext()){
    String fName = fileScan.next();
    String lName = fileScan.next();
    int age = fileScan.nextInt();
    String phoneNumber = fileScan.next();

    Client client = new Client(....); //use info above

    accounts[numAccounts].setClient(client);
    accounts[numAccounts].setBalance(fileScan.nextDouble());
    accounts[numAccounts].setAccountNum(fileScan.nextInt());

    numAccounts++;
    System.out.println(accounts[numAccounts]);
}

您將自己的客戶端設置為null ,然后在null引用上調用函數,這就是為什么要獲取NPE

accounts[i] = new Account(null, i, i); //(client, balance, accountNum)

在空引用上調用方法或嘗試訪問空引用的字段將觸發NPE。

范例:

public class Test
{
    public static void main(String[] args)
    {
        Object obj = null;
        obj.toString(); //cause Null Pointer Exception
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM