[英]How to avoid null properties?
我正在練習建立銀行系統,創建帳戶類,客戶類和銀行類的練習,但是當我檢查程序時會得到:
Exception in thread "main" java.lang.NullPointerException.
這是我的課程:
package bank.elements;
public class Account {
private int id;
private float balance;
//constructors
public Account(int id, float balance){
this.setId(id);
this.setBalance(balance);
}
public Account (int id){
this.id=id;
this.setBalance(0);
}
//getters
public int getId(){
return this.id;
}
public float getBalance(){
return this.balance;
}
//setters
public void setBalance(float balance){
this.balance+=balance;
}
public void setId(int id){
this.id=id;
}
}
package bank.elements;
public class Client {
private int id;
private String name;
private String rank;
private float balance;
private Account[] accounts = new Account[100];
public Client(){
}
//getters
public int getId(){
return id;
}
public String getName(){
return name;
}
public String getRank(){
return rank;
}
public float getBalance(){
return balance;
}
public float getAccountBalance(int id){
float balance = 0;
for (int i = 0; i < accounts.length; i++) {
if(accounts[i].getId()==id){
balance = accounts[i].getBalance();
}
}
return balance;
}
public float getFortune(){
float sum = 0;
for (int i = 0; i < accounts.length; i++) {
sum+=getAccountBalance(i);
}
sum+=getBalance();
return sum;
}
//setters
public void setName(String name){
this.name = name;
}
public void setBalance(float balance){
this.balance+=balance;
}
public void setId(int id){
this.id=id;
}
public void addAccount(int id){
for (int i = 0; i < accounts.length; i++) {
if(accounts[i]==null){
accounts[i].setId(id);
}
}
}
}
package bank.elements;
public class Bank {
public Bank(){
}
public Client[] clients = new Client[100];
public float getBalance(){
float sum = 0;
for (int i = 0; i < clients.length; i++) {
sum+= clients[i].getFortune();
}
return sum;
}
public void addClient(){
for (int i = 0; i < clients.length; i++) {
if(clients[i] == null){
clients[i].setId(i);
}
}
}
public void removeClient(int id){
for (int i = 0; i < clients.length; i++) {
if(clients[i].getId()==id){
clients[i]=null;
for (int j = (i+1); j < clients.length; j++) {
clients[j] = clients[j-1];
}
}
}
}
}
這是程序線程:
package bank.program;
import bank.elements.Account;
import bank.elements.Client;
import bank.elements.Bank;
public class Program {
public static void main(String[] args) {
Bank b = new Bank();
b.addClient();
b.clients[0].setBalance(100);
b.clients[0].addAccount(2);
System.out.println(b.clients[0].getFortune());
}
}
我想念什么?
在您的addClient()
方法中:
for (int i = 0; i < clients.length; i++) {
if(clients[i] == null){
clients[i].setId(i);
}
}
因此,拋出NPE是完全正常的,因為您檢查數組第i個位置的Client對象是否為null
,然后嘗試從該對象訪問方法,因此也要訪問NPE。
當您進行public Client[] clients = new Client[100];
,將數組的100個插槽初始化為null
(Java中Object的默認值初始化)。
我會在您的構造函數中對其進行初始化:
public Bank(){
for(int i = 0; i < clients.length; i++){
clients[i] = new Client();
}
}
在addClient()
方法中更改if( if client[i] != null
以防止NPE,請執行以下操作),即:
for (int i = 0; i < clients.length; i++) {
if (client[i] != null){
clients[i].setId(i);
}
}
對具有Account
數組的Client
類的相同注釋。
還可以考慮閱讀以下內容: java-什么是空指針異常?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.