Exception in thread “main” java.lang.NullPointerException
java程序的空指针异常
错误原因:
属性未初始化,更具体点就是类里面属性之一的对象数组未进行初始化
解决方法:
1.在属性声明的时候就进行显式的初始化赋值
2.在构造器中进行属性的初始化赋值
方法1如下所示:
方法2如下所示:
最后来深入解析一下:
如果在main()代码里我们创建一个Bank类的对象bank(假设现在属性只是声明而未进行初始化赋值):
Bank bank = new Bank();
如下所示,在堆中开辟一个空间存放bank对象的属性并将地址给bank。但此时属性值是默认值,如图所示,对象数组customers默认值为null,执行bank.addCustomer(String f, String l)方法必然会出现空指针异常。
而进行如上述所说的属性初始化操作之后,如下所示:
调用addCustomer(String f, String l)方法:
bank.addCustomer("Jane", "Smith");
最后贴上代码:(Bank.java和BankTest.java)
// Bank.java
package com.atguigu.exer4;
public class Bank
{
// private Customer[] customers = new Customer[100];
private Customer[] customers;// 存放多个客户的数组
private int numberOfCustomers;// 记录客户的个数
public Bank()
{
customers = new Customer[100];// 加上这句话,若不加上只是声明而非初始化
}
// 添加客户
public void addCustomer(String f, String l)
{
customers[numberOfCustomers++] = new Customer(f, l);
// 或者分开写,如下所示
// Customer cust = new Customer(f, l);
// customers[numberOfCustomers++] = cust;
}
// 获取客户的个数
public int getNumOfCustomers()
{
return this.numberOfCustomers;
}
// 获取指定位置上的客户
public Customer getCustomer(int index)
{
// return customers[index];//可能报异常
if (index >= 0 && index < numberOfCustomers)
{
return customers[index];
}
return null;
}
}
// BankTest.java
package com.atguigu.exer4;
public class BankTest
{
public static void main(String[] args)
{
Bank bank = new Bank();
bank.addCustomer("Jane", "Smith");//0
bank.addCustomer("Sam", "Fisher");//1
bank.addCustomer("Bayek", "Siwa");//2
bank.addCustomer("Cayde", "6");//3
int num = bank.getNumOfCustomers();
System.out.println("银行客户一共有" + num + "个人!");
Account acct = new Account(1000);
bank.getCustomer(1).setAccount(acct);
bank.getCustomer(1).getAccount().deposit(1000);
bank.getCustomer(1).getAccount().withdraw(500);
bank.getCustomer(1).getAccount().withdraw(2000);
double balance = bank.getCustomer(1).getAccount().getBalance();
System.out.println("余额还有:" + balance);
System.out.println("Customer [" + bank.getCustomer(1).getFirstName() +
", " + bank.getCustomer(1).getLastName() + "]" + " balance is "
+ balance);
}
}