Java自定義類數組報null的相關問題及解決
Java自定義類數組報null問題
不要沿用c++的想法。
java的數組分基本數據類型和引用類型
- 基本數據類型:如int[] s=new int[10]; 這里面創(chuàng)建了長度為10的整型數組,并且自動為每個元素創(chuàng)建了對象,即能找到相關地址
- 引用類型:如寫了個class student(){}, 在student[] s=new student[10]中只是new了數組空間,我們還要對s[0]-s[9]每一個創(chuàng)建對象,否則數組為null。
解決方法
for(int i=0;i<10;i++) { ? ? s[i]=new student(); }
可以理解為先創(chuàng)建了空數組,然后為每一個元素添加了屬于它的屬性。
實例:
設某一個班共有N(N=20)名學生,期末考試5門課程,請編一程序評定學生的獎學金,要求打印輸出一、二等獎學金學生的學號、姓名和各門課成績。 (獎學金評定標準是:總成績超過全班總平成績20%發(fā)給一個獎學金,超過全班總平成績10%發(fā)給二個獎學金。)
Java自定義類二維數組出現NullPointerException錯誤
自定義的類
package com.hbq.bugs; // MyClass 類 public class MyClass { public int s1; public int getS1() { return s1; } public void setS1(int s1) { this.s1 = s1; } }
主函數
package com.hbq.bugs; public class App { public static void main(String[] args) { MyClass [][] c=new MyClass[10][10]; c[0][0].setS1(1); } }
運行會出現
進入debug模式發(fā)現
c[0]的所有元素都是null。
這是由于引用對象不初始化默認都為null的原因。
所以會有一個長度為10的一維數組,每個一維數組的元素又是長度為10的一維數組,這個數組里的元素默認都為null。
所以要對每一行每一列進行實例化賦值開拓新空間。
package com.hbq.bugs; public class App { public static void main(String[] args) { MyClass[][] c = new MyClass[10][10]; // c[0][0].setS1(1); for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) { c[i][j] = new MyClass(); } } c[0][0].setS1(1); System.out.println(c[0][0].getS1()); } }
運行成功!
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Java線程之線程同步synchronized和volatile詳解
這篇文章主要介紹了Java線程之線程同步synchronized和volatile詳解,具有一定參考價值,需要的朋友可以了解下。2017-11-11java狀態(tài)機方案解決訂單狀態(tài)扭轉示例詳解
這篇文章主要為大家介紹了java狀態(tài)機方案解決訂單狀態(tài)扭轉示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-03-03Java之Error與Exception的區(qū)別案例詳解
這篇文章主要介紹了Java之Error與Exception的區(qū)別案例詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下2021-09-09